web-dev-qa-db-ja.com

いつReact state Vs Redux Storeを選択しますか

私はReduxを学習してきましたが、不明な部分は、react状態とreduxストアを使用してからアクションをディスパッチすることを決定する方法です。これまでの読書から、Reduxストアの代わりにReact stateを使用して、まだ物事を成し遂げることができるように見えます。残りの部分はステートレスコンポーネントですが、どのような場合にReact state Vs redux storeを使用するかを決定するにはどうすればよいですか。誰か助けてください。

ありがとう!

27
JavaNovice

状態を他のコンポーネントと共有する必要がない場合、またはコンポーネントがアンマウントされたときに状態を保持する必要がない場合は、コンポーネントの状態にするだけです。

Reduxストアはフロントエンドのデータベースであると考えることができます。APIから取得した製品データなどがあれば、Reduxストアが適切な場所です。 isOpenプロパティを使用するドロップダウンコンポーネントがある場合、そのドロップダウンの親はdropdownIsOpenをコンポーネントの状態として保持できます。

詳細については、ダンの回答をご覧ください。 https://github.com/reactjs/redux/issues/1287

また、あなたは言った

コンテナコンポーネントは1つのみで、残りはステートレスコンポーネントとして

これは間違っています。複数のコンテナコンポーネントを使用できます。コンテナコンポーネントには、別のコンテナコンポーネントを含めることもできます。

36
CodinCat

あなたは絶対に正しい。 Redux(および一般的なフラックスアーキテクチャ)は、大規模なアプリの構築を支援する形式主義ツールにすぎません。それらはまったく必要ありません。

実際、あなたが私よりも良い答えを与えるかもしれないreduxの作成者であるダン・アブラモフによる「あなたはreduxを必要としないかもしれない」という興味深い投稿があります: https://medium.com/@dan_abramov/you-might-not -need-redux-be46360cf367#.7093fm1z8

1
Axnyff

本から:

まず、必要な最小限のデータのみを状態にする必要があることを常に念頭に置く必要があります。たとえば、ボタンがクリックされたときにラベルを変更する必要がある場合、ラベルのテキストを保存するべきではありませんが、ボタンがクリックされたかどうかを示すブールフラグのみを保存する必要があります。次に、イベントが発生したときに更新し、コンポーネントを再レンダリングする値のみを状態に追加する必要があります。状態が情報を保存するのに適切な場所であるかどうかを判断する別の方法は、永続化するデータがコンポーネント自体またはその子の外部で必要かどうかを確認することです。複数のコンポーネントが同じ情報を追跡する必要がある場合は、アプリケーションレベルでReduxのような状態マネージャーの使用を検討する必要があります。

1
zloctb