React全部バケツリレー自動化
THE バケツリレー
このようなコードを書くと、Context
のstate
とprops
が合体したものが、各Component
にprops
として配給される感じです。
let user = new User(JSON.parse(dom.getAttribute('data-user')));
ReactDOM.render(
<Context {...{user}}>
<Component/>
<SubComponent/>
</Context>
, dom);
Context
のrender
をこうします。
render() {
let props = Object.assign({}, this.props, this.state);
delete props.children;
let {children} = this.props;
let elements = !!children.map ? children : [children];
return <div className="context-wrapper">
{elements.map((child, i)=> React.cloneElement(child, Object.assign(props, {key: i})))}
</div>;
}
これで、最初の例だと、user
はComponent
にもSubComponent
にも配給されて、並列関係として描画されます。
なぜ
現在作成中のものでは、SPAではなく、各機能ごとにReactでひとつのセットを作成しました。結果、12機能ぐらいに分割されましたが、最初に出したようなコードを機能ごとに書くことになりました。
その際、機能が違えば扱うstate
もprops
も変わるわけですが、Context
の中にComponent
が具体的に出てきたり、具体的にprops
を書くのはなんだかめんどくさいなぁと思ってこうなりました。
Context
は処理に集中、Component
はUIに集中、ReactDOM.render
でどれを使っていくか決めるみたいな分け方ができて、比較的コードがとっちらからずに済んでよかったです。