標準の構成関数と 'div' コンポーネントが与えられた場合、次のような 2 つの HOC をどのように記述しますか?
- 「div」要素は 20 ピクセルの緑色のボックスとして始まり、クリックすると 50 ピクセルの青色のボックスになります。
- a: 状態を props とマージすること、および b: 状態変更をトリガーすることの懸念は、別々の HOC によって処理されます。
- updater HOC は状態を props にマップし、デフォルト状態を設定します
- ディスパッチャ HOC は、クリック時に新しい状態を取得する関数を受け入れます
以下の例は、緑色のボックスを取得するために機能し、ハンドラーを正しく起動します。更新は、Dispatcher HOC の状態でのみ発生します。アップデータ HOC の状態は変更されず、その props も変更されません。
私は何が起こっているのかを理解することに非常に興味があります。Compose で 2 つの HOC の順序を反転すると、ハンドラーが設定されません。それらは両方とも にマージされるため{...this.props}
、それは私には意味がありません。複数の HOC が小道具と状態をマージする方法について、私が理解できないことがあると思います。
const HOCDispatcher = myFunc => BaseComponent => {
return class Dispatcher extends React.Component {
constructor(props,context){
super(props,context);
this.handlerFn = (event)=>{this.setState(myFunc)}
}
render(){
return createElement(BaseComponent,{...this.props,onClick:this.handlerFn});
}
}
}
const HOCUpdater = defaultState => BaseComponent => {
return class Updater extends React.Component {
constructor(props,context){
super(props,context);
this.state = Object.assign({},defaultState,this.state);
}
render(){
return createElement(BaseComponent,{...this.props,...this.state});
}
}
}
const MyComponent = compose(
HOCDispatcher(()=>({
style:{width:'50px',height:'50px',background:'blue'}
})),
HOCUpdater({
style:{width:'20px',height:'20px',background:'green'}
}),
)('div');