2017-10-22 17 views
0

ReduxやMobXのような状態管理ライブラリを使用する場合でも、まだ小道具を使用する必要がありますか?状態管理ソリューション対小道具

たとえば、親が子に小道具として状態を送信している場合、親と子の両方がRedux/MobXストアをインポートして、インポートされたストアを介してその州のアクションを呼び出すことはできませんか?

+0

Reduxは、少なくとも「connect」メソッドを使ってコンポーネント上の小道具としてストア状態を適用する場合にのみ、小道具でのみ機能します。 Reduxを使用すると、親と子の両方で状態を小道具にマッピングできますが、実際にこの動作をしたいのですか?理論的には、あなたの子コンポーネントの実際の強さに応じて、親が子に状態を渡せるようにすることができます。私はMobXの場合も同様の話だと思っていますが、それについてはほとんど分かりません。 – Icepickle

答えて

1

ReduxまたはMobXを使用してアプリケーションの状態を保存する場合は、接続するコンポーネント(スマート)と切断するコンポーネント(ダム)を決定する必要があります。

スマートコンテナは、ストアへの接続、ストア内の状態の更新、状態の変更のサブスクライブを担当します。これらのコンポーネントは、Redux/MobXストアを認識している唯一のコンポーネントです。

コンテナには、一般的にステートレスであり、主にアプリケーションのプレゼンテーションの側面に責任がある多くのダムの子があります。彼らはRedux/Mobxストアの存在を認識せず、親からの小道具として州の変更や行動を受け取ります。

this articleからコンテナとプレゼンテーションコンポーネントの違いをわかりやすくするには、Reduxの作成者@DanAbramovを使用します。

2

あなたは常にいくつかの理由の再来店に渡すのではなく、すべてのコンポーネントをマッピング親子小道具を反応させることを好む必要があります。

  1. 反応を渡し親子小道具のための最適化をレンダリング提供し、Reduxのはしていません。これは、Reduxストアのあらゆる変更を意味します。マッピングコンポーネントは、パフォーマンスの問題を引き起こして再レンダリングする必要があります。 Reactでは、詳細が変更されたコンポーネントだけがレンダリングする必要があります。

  2. Reduxストアでマップされたコンポーネントは、相互に強固に結合されているため再利用できません。したがって、あなたはReactで完全に構成可能なパターンを達成することはできません。したがって、Reactの方法でコンポーネントに小道具を渡し、Reduxマッピングをいくつかの主要なコンポーネントだけで使用してください。

+0

私があなたが作ったポイントに同意できないと確信しています。これらの主張の根拠となる参考資料はありますか? AFAIK#1。 'react-redux'はレンダリングのための多くの最適化を提供します。詳細については、https://github.com/markerikson/react-redux-links/blob/master/react-performance.md#redux-performanceを参照してください。また、通常の親子の小道具では、 'shouldComponentUpdate'と' componentWillReceiveProps'を使って小道具の変更に基づいてレンダリングを最適化することができます。接続された部品を減らす場合も同じです。 – palsrealm

+0

また、Reduxストアの変更ごとに、変更された状態にサブスクライブするAFAIKのみのコンポーネントが、すべてのコンポーネントではなく、再レンダリングされます。 #2 Reduxストアに接続されているコンポーネントはスマートコンポーネントであり、そのコンポーネントの親コンポーネントに依存しません。したがって、アプリケーション全体で再利用したり、レンダリングしたりすることができます。親からの小道具に依存するコンポーネントは、常に小道具として渡すために必要なデータを持つ親を持つ必要があります。カップリングが生じる。 – palsrealm

+0

@palsrealm#2疎結合という考え方は間違っています。小道具を渡すコンポーネントでは、小道具がそのインターフェース(PropTypes)に従う限り、その小道具がどこから来るかは気にしません。これで、コンポーネントをReduxストアでマップすると、 'mapStateToProps'関数を介してストアと緊密に結合されました。 Reduxストアで何かを変更すると、マッピングコンポーネントが壊れる可能性があります。また、同じコンポーネントを別のストアで再利用するには、 'mapStateToProps'の実装を変更する必要があります。 –

関連する問題