定義
高階元件(High Order Component, HOC) 輸入:React 元件 => 輸出:React 元件
使用場景
高階元件的作用主要是用來加強元件,通過把基礎元件拆分成很小的粒度,通過高階元件進行增強並返回,以此提高複用性。 比如需要開發一個訊息框,一開始只需要一個模態框能夠顯示訊息就可以。後來需要多增加『確定』『取消』按鈕組,這時候只要用高階元件進行一次對基礎模態框的增強就可以。避免了對原有元件進行修改,不影響原有元件的呼叫方。
實現思路
- Props Proxy 屬性代理
- Inheritance Inversion 反向繼承
Props Proxy 屬性代理
核心思想是返回一個全新的元件,並在新元件中使用基礎元件,方法是:
- 增刪改 props
- 組合其他元件
const BasicComponent = require('BasicComponent');
const Button = require('Button');
const React = require('react');
const buttonWrapperHOC = (params) => {
return class HOCBasicComponent extend React.Component {
render() {
return (
<div>
<BasicComponent/>
<div className='button-wrapper'>
<Button value='確定'/>
<Button value='取消'/>
</div>
</div>
);
}
}
}
複製程式碼
Inheritance Inversion 反向繼承
核心思想是返回一個繼承了基礎元件的元件
之所以被稱為 Inheritance Inversion 是因為 WrappedComponent 被 Enhancer 繼承了,而不是 WrappedComponent 繼承了 Enhancer。在這種方式中,它們的關係看上去被反轉(inverse)了。
可以進新的操作
- 增刪改 props
- 修改render輸出的DOM樹(改起來不是很方便)
const BasicComponent = require('BasicComponent');
const Button = require('Button');
const React = require('react');
const HOC = (params) => {
return class HOCBasicComponent extend BasicComponent {
render() {
return super.render();
}
}
}
複製程式碼