これまでは、小道具を介してコンポーネントにデータが入力されるフラックスフローに慣れていました。したがって、Propsシグネチャを見て、コンポーネントの要件を確認できます。
フックは素晴らしい機能ですが、それらに移行すると、実際のコンポーネントコードを見て確認する必要があるため、管理が難しい依存関係の別の入り口が提供されることがわかります。
もちろん、フックはコンテナコンポーネントでのみ使用できますが、その主なセールスポイントのいくつかは、ネストとHOCを削減する能力であると感じています。
どのコンポーネントがフックを使用し、どのコンポーネントがレンダープロップを使用するかを決定するための(現在)ベストプラクティスは何ですか?
React FAQs hooksによると、renderProps
とHOCs
の代替として使用できますが、それらと共存できます
多くの場合、レンダープロップと高次コンポーネントは1つの子のみをレンダーします。フックは、このユースケースを提供するためのより簡単な方法だと思います。 まだ両方のパターンの場所があります(たとえば、仮想スクローラーコンポーネントにはrenderItemプロパティがあり、ビジュアルコンテナコンポーネントには独自のDOM構造があります)。ただし、ほとんどの場合、フックで十分であり、ツリーのネストを減らすのに役立ちます。
フックは、機能コンポーネントでステートフルロジックを許可し、Reactのクラスコンポーネントに似ています。
フックは、実際のコンポーネントコードを見て確認する必要があるため、管理が困難です。
そうではありません。HOCまたはrenderPropsにあるカスタムロジックをカスタムフックで引き出して、実際のコンポーネントで実際に何が行われているのかを理解する代わりに、その実装を探すことができるからです。
フックとHOCは異なるプログラミングモデルであり、それらを比較することはオレンジとリンゴを比較するように思われます。
TL; DR
経験則として、コンポーネントの条件付きレンダリングが必要な場合はHOCを使用し(条件の場合:Aをレンダリング、そうでない場合はBをレンダリング)、そうでない場合はフックを使用します。それは私の意見です。
HOCの長所
HOCの短所
x
のみが必要な場合でも、すべてのプロップが子に渡されます。HOCs Pro&Con both
フックの長所
フックの短所
私がよく見ることの1つは、コンポーネントで副作用のあるフックを使用することです。そのため、コンポーネントのテストが難しくなり、フックの私的な使用例としては適していません。
たとえば、カスタムconst {data, loading, error} = useFetch(endpointUrl)
を使用してコンポーネントを作成し、レンダリングパーツで直接使用しますreturn <>{data.name}</>
同じコンポーネント。
これは、私にとって、HOCのユースケースです。 HOCにデータをロードし、それをまだダンプコンポーネントのプロパティとして提供します。これにより、コンポーネントを簡単にテストでき、懸念事項を分離できます。