React Context に相当する useSelector を実装しますか? 質問する

React Context に相当する useSelector を実装しますか? 質問する

Reduxをコンテキストとフックで置き換える方法を紹介する記事はたくさんあります(ケント・ドッズからのこの一枚基本的な考え方は、グローバル状態をReduxストア内に置くのではなく、コンテキストを通じて利用できるようにするというものです。しかし、このアプローチには大きな問題が1つあります。コンテキストをサブスクライブするコンポーネントは、コンポーネントが変更した状態の部分に注意するかどうかに関係なく、コンテキストに変更が発生するたびに再レンダリングされます。関数型コンポーネントの場合、React-reduxはこの問題をuseSelectorフックそこで私の質問は、Redux ストアの代わりにコンテキストの一部を取得し、useSelector と同じシグネチャを持ち、useSelector と同様に、コンテキストの「選択された」部分が変更された場合にのみコンポーネントの再レンダリングを引き起こす、useSelector のようなフックを作成できるかどうかです。

(注記:この議論React Githubページではそれができないことが示唆されています)

ベストアンサー1

いいえ、それは不可能です。プロバイダに新しいコンテキスト値を入力するたびに、全てコンシューマーは、そのコンテキスト値の一部のみが必要な場合でも、再レンダリングします。

それは具体的には、React-Redux v6でコンテキストを使用して状態の更新を伝播することをあきらめ、v7で直接ストアサブスクリプションを使用するように切り替えた理由の1つです。

そこにはコンテキストにセレクターを追加するためのコミュニティが作成したReact RFCしかし、React チームが実際にその RFC の実装を追求するかどうかはまったくわかりません。

おすすめ記事