這篇來說明 React 實用的概念-高階元件(higher order component)
所謂的 higher order,其實在 js 中也有類似的概念,叫做 higher order function
依序做個簡單的說明
將一個或多個 function 作為參數傳入,得到回傳值為另一個新的 function
不同 component
中使用類似的 function
重複
使用 react component 內的邏輯
因為實務上 component 會散落在 component tree 內,這種情況便不適合提升 state 到共同 ancester component
適合使用提升 state 的情況
component 有共同的 ancester component
函式傳入原始的 component 作為參數,回傳新的 component
A pattern where a function takes a component as an argument and returns a new component
const NewComponent = higherOrderComponent(OriginalComponent);
import React from 'react';
// 傳入原始的 component
const higherOrderComponent = (OriginalComponent) => {
class HOC extends React.Component{
render(){
return(<OriginalComponent />)
}
}
return HOC; // 回傳新的 component
}
HOC 可用 with__ 為開頭命名
HOC 常常搭配第三方 library 做使用,常見的如下
library name | 使用方式 |
---|---|
react-router | withRouter(UserPage) |
material-ui | withStyles(styles)(UserPage) |
react-redux | connect(mapStateToProps, mapDispatchToProps)(UserPage) |
https://www.smashingmagazine.com/2020/06/higher-order-components-react/
https://zh-hant.reactjs.org/docs/higher-order-components.html