React高階組件(HOC)


1.什么是HOC?

     HOC(Higher-order component)是一種React 的進階使用方法,只要還是為了便於組件的復用。強調一點,HOC本身並不是 React API, 它就是一個方法,一個接收一個組件作為參數,返回一個增強的組件的方法。

     概括的講,HOC能夠實現:

     1. 代碼復用,代碼模塊化

     2. 渲染劫持, 操作state

     3. Props 增刪改

HOC的實現方式

在這節中我們將學習兩種主流的在 React 中實現高階組件的方法:屬性代理(Props Proxy)和 反向繼承(Inheritance Inversion)。

 

基於反向繼承(Inheritance Inversion, 縮寫II)的方式

反向繼承的實現為:

 

 

返回的高階組件類(Enhanced)繼承了 WrappedComponent。這被叫做反向繼承是因為 WrappedComponent 被動地被 Enhancer 繼承,而不是 WrappedComponent 去繼承 Enhancer。 

反向繼承允許高階組件通過this關鍵詞獲取 WrappedComponent,意味着它可以獲取到 state,props,組件生命周期(component lifecycle)鈎子,以及渲染方法(render)。


使用高階組件遇到的問題

靜態方法丟失

當使用高階組件包裹原始組件,返回的新組件會丟失原始組件的所有靜態方法。

解決方案:

    1. 手動拷貝所有靜態方法給新組件;(不推薦)

    2. 使用hoist-non-react-statics來幫你自動處理,它會自動拷貝所有非React的靜態方法;(react-router 里withRouter就使用了這個包)

Refs屬性不能傳遞

解決方案: 

新組建傳遞一個ref 回調函數屬性給原始組件,也就是將ref組件綁定到新組件上;如:

<Enhancer  getRef={ref => this.wrappedC = ref}  />

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM