ReactベースのWebアプリケーションを開発するとき、コンポーネントをスマートとダムに分割し、再利用可能でカスタムにすることがよくあります。 再利用可能な構成要素は、例えば、 <RedButton>
または<CustomSelect>
などですが、<FluxStoreBinder>
などのミドルウェアコンポーネントであってもかまいません。ミドルウェアコンポーネントは、通常、Fluxストアへの購読/購読、または他のステートフルなものへのラッピングなど、いくつかの機能を追加しながら、children
をレンダリングします。しかし、再利用可能なスマートミドルウェアコンポーネントをダムコンポーネントに接続するには、その小道具が適合しない可能性があるため、余分な作業が必要になります。例えば。 <FluxStoreReader>
はdata
という名前のプロパティを返しますが、<ToDoList>
の子はtoDoItems
と予測されます。React:通常のダムコンポーネントと再利用可能なコンポーネントを接続する方法
質問したいのは、ミドルウェアコンポーネントにどのような方法でレンダリングするかを伝えることです。適切で推奨されるアプローチは何ですか?このようrender={({arg1}) => <Child prop1={arg1}/>}
として、小道具を通じて機能を提供することにより
:現在、私はどのようにその子をレンダリングするためのミドルウェアコンポーネントを伝えるの3つの方法を見てきました。機能は次のとおりです。この関数内で自分の状態/ props/etcにアクセスできます。あなたはプロップを処理して再マップすることができます。条件に応じてレンダリングする子を指定できます。ミドルウェアコンポーネントを介してプロキシする必要なく、必要な小道具を子供に設定することができます。
React.cloneElement(children, props)
を返すことによって、props
をリマップする機能を提供します。React.cloneElement(children, props)
をレンダリングし、受信した小道具を子にプロキシすることによって、純粋なコンポーネントアプローチ、コールバックなし。これは、上記2の機能/柔軟性を持たず、さらにいくつかの作業が必要です。ミドルウェアとその子の間に別のミドルウェアが必要です。Mike Tronicが提案する4番目のオプションは、基本的にコンポーネントファクトリである高次コンポーネントを使用することです。必要な引数の1つが子コンポーネントクラスです。それは#3とほとんど同じですが、あなたが工場を走らせると、子供のタイプを変更することさえできません。
あなたのアプリケーションにはどちらの方法を選択しましたか?どうして?思いを共有してください。
リアクションの男の意見を聞いてうれしいです。
なぜあなたは、パラメータを持つクラスは、タスクのために十分であるクラスファクトリが必要でしょうか?ファクトリは、1)JSXツリー(明示的な階層なし)に表示されている場合、1)柔軟性に劣ります。 – meandre
高次関数の概念は高次の要素と同じですが、上記のポストを理解してください。あなたが高次関数とクロージャを理解していない場合、少し混乱します。 –
ミドルウェアコンポーネントを作成する目的で、コンポーネントファクトリは絶対に必要ありません。特にあなたがYouTubeのリンクを投稿してスレッドを捨てることなくここで説明しない限り。そしてあなたのYouTubeチャンネルの宣伝をやめてください。相手の専門知識レベルについて仮説を立てないでください。 – meandre