Reactの hooks の導入により、フックとクラスコンポーネントで機能コンポーネントを使用するタイミングが主な混乱になりました。これは、フックを使用すると、機能コンポーネントでもstate
および部分lifecycle hooks
を取得できるためです。だから、私は次の質問があります
たとえば、フックを備えた機能コンポーネントは、クラスコンポーネントのようにperfで役立ちません。 shouldComponentUpdate
が実装されていないため、再レンダリングをスキップできません。もう理由はありますか?
前もって感謝します。
Hooks
およびReact.memo
やReact.lazy
などの他の機能を導入する背後にある考え方は、記述する必要のあるコードを削減し、同様のアクションを一緒に集約することです。
ドキュメントでは、クラスの代わりにフックを使用する理由はほとんどありません
コンポーネント間でステートフルロジックを再利用するのは難しい通常、HOCまたはrenderPropsを使用する場合、DevToolsで表示しようとすると、複数の階層でアプリを再構築する必要があります。
複雑なコンポーネントは理解しにくくなります多くの場合クラスで相互に無関係なコードはしばしば一緒になってしまうか、関連するコードがばらばらになりがちで、メンテナンスがますます難しくなります。そのような場合の例は、componentDidMount
でリスナーを追加し、componentWillUnmount
でそれらを削除するイベントリスナーです。フックを使用すると、これら2つを組み合わせることができます
クラスは人とマシンの両方を混乱させますクラスでは、バインディングと、関数が呼び出されるコンテキストを理解する必要があり、これはしばしば混乱を招きます。
フックを備えた機能コンポーネントは、クラスコンポーネントのようにperfで役立ちません。 shouldComponentUpdateが実装されていないため、再レンダリングをスキップできません。
機能コンポーネントは、React.PureComponent
を使用することで、クラスでReact.memo
と同様の方法でメモでき、カスタム関数を実装できるReact.memo
の2番目の引数としてコンパレータ関数を渡すことができます。コンパレータ
アイデアは、Reactクラスコンポーネントを使用して、Hooks
およびその他のユーティリティを使用して機能コンポーネントを使用して記述できるコードを記述できるようにすることです。フックは、コードの抽出、テスト、および再利用の柔軟性を高めながら、クラスのすべてのユースケースをカバーできます。
フックはまだ完全に出荷されていないため、重要なコンポーネントにはフックを使用せず、比較的小さなコンポーネントから始めることをお勧めします。はい、クラスを機能コンポーネントに完全に置き換えることができます
ただし、データフェッチのためにSuspenseが出るまで、フックを使用して機能コンポーネントよりもクラスコンポーネントを選択する必要がある理由の1つです。 useEffectフックを使用したデータフェッチは、ライフサイクルメソッドほど直感的ではありません。
また、@ DanAbramovのツイートの1つでは、フックはSuspenseで動作するように設計されており、Suspenseが使用されるまでClassを使用する方が良いと述べています