一、cookie庫css
cookie的庫有不少,網上選一款適合便可。html
如:前端
browser-cookiesnode
地址:react
https://www.npmjs.com/package/browser-cookiesios
二、高階組件web
高階組件經過包裹被傳入的React組件,通過一系列處理,最終返回一個相對加強的React組件,供其餘組件調用。算法
1)基於屬性代理的方式chrome
它經過作一些操做,將被包裹組件的props
和新生成的props
一塊兒傳遞給此組件,這稱之爲屬性代理。express
export default function withHeader(WrappedComponent) { return class HOC extends Component { render() { const newProps = { test:'hoc' } // 透傳props,而且傳遞新的newProps return <div> <WrappedComponent {...this.props} {...newProps}/> </div> } } }
2)基於反向繼承的方式
這種方式返回的React組件繼承了被傳入的組件,因此它可以訪問到的區域、權限更多,相比屬性代理方式,它更像打入組織內部,對其進行修改。
export default function (WrappedComponent) { return class Inheritance extends WrappedComponent { componentDidMount() { // 能夠方便地獲得state,作一些更深刻的修改。 console.log(this.state); } render() { return super.render(); } } }
三、prop-types
建立的組件是能夠複用的,因此咱們開發的組件可能會給項目組其餘同事使用。但別人可能對這個組件不熟悉,經常會忘記使用某些屬性,或者某些屬性傳遞的數據類型有誤。所以咱們能夠在開發 React自定義組件時,能夠經過屬性確認來聲明這個組件須要哪些屬性。
四、websoket
express與websoket須要注意鏈接到一塊兒使用 寫法: const server = require('http').server(app) const io = require('socket.io')(server) 前端使用要寫具體的具體的ip加端口地址連接
五、react生命週期
jsx babel轉換 React.createElement保存在內存中
虛擬DOM React.createElement保存DOM樹,diff算法
Initial render 父組件render | | constructor componentWillReceiveProps | | componentWillMount shouldComponentUpdate <- this.setState | | | componentWillUpdate <- this.forceUpdate | | ————————————————————— render ———————————————— | | componentDidMount componentDidUpdate |___________________________________________| | componentWillUnmount 組件卸載執行
shouldComponentUpdate(nextProps, nextState) 兩個參數,能夠定製渲染,當知足條件返回true就執行render渲染
this.setState 是隊列機制而且是異步的,更新只會執行render更新一次
全局context contextTypes = { color: React.PropTypes.string } 而後經過getChildText方法,來給子context對象的屬性賦值: getChildContext() { return {color: "purple"}; } childContextTypes = { color: React.PropTypes.string };
六、react優化
事件this處理,在construct bind(this) 這樣性能會比較好 傳輸數據時,儘量的減小數據的傳輸,只傳有必要的數據 reactURL加?react_pert能夠在chrome的性能面板直接查看,performance 由於每次數據的變化都會觸發render,而優化可以使用shouldComponentUpdate決定渲染達到性能優化 若是組件是根據狀態渲染,沒有複雜的值變更,可使用React.PureComponent,他比shouldComponentUpdate更好一些,不會渲染沒有變更狀態的組件 數據結構不要太複雜,這回影響性能,由於react只會淺比較,深層的數據結構,只能認爲數據變更,而後render
immutable Immutable數據就是一旦建立,就不能更改的數據。每當對Immutable對象進行修改的時候,就會返回一個新的Immutable對象,以此來保證數據的不可變。 優勢: 1、減小內存使用 2、併發安全 3、下降項目複雜度 4、便於比較複雜的數據,定製shouldComponentUpdate方便 缺點: 1、學習成本 2、庫的大小 三、對先有的項目入侵嚴重
reselect性能優化
Selector能夠計算衍生的數據,可讓Redux作到存儲儘量少的state。
Selector比較高效,只有在某個參數發生變化的時候才發生計算過程.
Selector是能夠組合的,他們能夠做爲輸入,傳遞到其餘的selector.
數組遍歷 key能夠提升性能,由於key惟一標識符,但使用索引不能提升
eslint 代碼檢查定製 異步函數 async+await 配合使用,await必須在async裏使用,使用他們代碼更加簡單 async (res)=>{ const data = await axios.post(....) //同步,須要等待它返回才往下走 data.... }
七、SSR:
首先咱們須要知道SSR對於SPA的好處,優點是什麼。
更好的SEO(Search Engine Optimization),SEO是搜索引擎優化,簡而言之就是針對百度這些搜索引擎,可讓他們搜索到咱們的應用。這裏可能會有誤區,就是我也能夠在index.html上寫SEO,爲何會不起做用。由於React、Vue的原理是客戶端渲染,經過瀏覽器去加載js、css,有一個時間上的延遲,而搜索引擎不會管你的延遲,他就以爲你若是沒加載出來就是沒有的,因此是搜不到的。
解決一開始的白屏渲染,上面講了React的渲染原理,而SSR服務端渲染是經過服務端請求數據,由於服務端內網的請求快,性能好因此會更快的加載全部的文件,最後把下載渲染後的頁面返回給客戶端。
服務器端使用react 由於後臺沒有什麼css之類的,因此使用使用鉤子,css-modules-require-hook 這個包來兼容
asset-require-hook 處理服務器端沒法加載圖片錯誤的
node支持babel 須要安裝babel-cli 在script裏配置NODE_ENV=test nodemon --exec babel-node server.js
node中支持jsx,須要配置文件.babelrc