私は最新のReactにアップグレードできるように、mixinsからHOCへリファクタリングしようとしています(現在はReact 13/ES5を使用しています)。コンポーネントがロードされると、ミックスインはルート付きのquery
プロパティを持つデータオブジェクトthis.data
にアクセスできます。React:Higher Orderコンポーネント:子供の状態を教えてください
React.createClass({
mixins: [myMixin],
data: {
query: "/api/foo"
},
componentDidUpdate(): function(){
}
...
}
はミックスイン内部componentDidMount
で、それは、そのルートを照会データを取り戻すと、状態の上に置きます。
var myMixin = React.createClass({
componentDidMount(): function(){
this.fetchData(this.data.query)
}
fetchData(query) {
// fetch the data
}
...
}
これは、私のコンポーネントから多くの定型文を抽出します。すべてのコンポーネントにcomponentDidMount
を実行する必要はありません。ちょうどdata
オブジェクトがあります。
私はこのミックスインをプロジェクト全体に散らばっています。これは実際にはこれよりもはるかに多くなりますが、私は単にそれを黙らせようとしています。
InはHOCです。私はdata
からすべてのものを取り出し、getInitialState
に入れました。今、ラップされたコンポーネントの状態にdata
があります。どうすればアクセスできますか?私のmixinのように、自分のHOCが私のcomponentDidMount
を処理し、data.query
にアクセスしてデータを取得します。私はcomponentDidMount
を持つすべてのコンポーネントを書き直す必要はありません。
PS- 私はmixinがなぜthis.data
を行うことができるのか誰かが教えてくれるのであれば、私は通常ReactとES6の最新バージョンを使用しています。 Reactの最新バージョンでは、render()
のようなオブジェクトをそのように定義することはできません。
あなたのHoCコード –
の投稿に同意しない場合は、これには簡単に答えることができます。もしあなたがこれを最も基本的なレベルで答えることができなければ、どのように複雑になるのですか? – user2465134
それは本当にうまくありません。あなたの質問はあなたが書いた方法のために理解するのがかなり難しかった。私はそれを読む時間を取って、あなたに合わせた解決策を考え出していました。あいまいな答えが必要な場合:子コンポーネントが親コンポーネントと通信する必要がある標準パターンのいずれかを使用できます。小道具を使って物事を子どもに伝えましょう(小道具として子供にラッパーの状態を渡すことができます)。あなたの子供が親に連絡する必要がある場合は、親にハンドラ関数を渡すようにしてください。 –