說明
- react 理解裝飾器
- react 寫一個預載入資料的裝飾器
- 看了以前的裝飾器的理解和預載入資料的裝飾器一定有疑問,為什麼這麼寫裝飾器。來看看下面的文章描述:
react 高階元件
- 在目前的前端社群,『推崇組合,不推薦繼承(prefer composition than inheritance)』
什麼是高階元件?
- 一個高階元件只是一個包裝了另外一個元件的 react 元件。
- 通常這是一個
函式
,本質上是一個類工廠函式(class factoy)
理解一個函式
hocFactory:: W: React.Component =>
E: React.Component複製程式碼
這裡 W(WrappedComponent) 指被包裝的 React.Component,E(Enhanced Component) 指返回的新的高階 React 元件。
- 包裝
- 1、屬性代理(props proxy): 高階元件操控傳遞給 wrappedComponent 的 props
- 2、反向代理(inheritance inversion): 高階元件繼承(extends)
高階元件用在什麼地方?
- 程式碼複用,邏輯抽象,抽離底層準備(bootstrap)程式碼
- 渲染劫持
- State 抽象和更改
- Props 更改
可用的地方非常多,下面我們先來實現一個高階元件
高階元件的實現
- 當然其中實現的方法主流的包括我們上面提到的,屬性代理和反向繼承兩種方法。
- 這兩種方法中又包括了幾種包裝 WrappedComponent 的方法
Props Proxy(屬性代理 PP)
function ppHOC(WrappedComponent) {
return class PP extends React.Component {
render() {
return <
WrappedComponent {...this.props
}/>
}
}
}複製程式碼
可以看到,這裡高階元件的 render 方法返回了一個 type 為 WrappedComponent 的 React Element(也就是被包裝的那個元件),我們把高階元件收到的 props 傳遞給它,因此得名 Props Proxy。
未完待續
- 高階元件有很多知識點,後續補上,本次為了給前面兩篇文章的裝飾器用到的高階元件做解釋。