2016-12-06 8 views
2

私はReact/Reduxでハッキングしており、たくさんのコンテナとコンポーネントを構築しています。コンテナをReduxのコンポーネントに置いても構いませんか?

enter image description here

私の質問この設計はOKです。

は、しかし、私は最近、このようになり、私は私の要素の上で作られたと判断設計上の選択に遭遇しましたか?基本的には、ボタンが数レベル深いので、 Redux ActionsをButtonに渡す方法は苦労しています。私は HeaderContainerからコンポーネントにコンポーネントを渡し続けることができますが、DOMが深くなったらそれは悪化して悪化します。

プレゼンテーションコンポーネントがコンテナコンポーネントを呼び出すため、このデザインが誤っているように感じます。

どのような考えですか?

+0

こんにちは、私は理解できませんが、なぜあなたはアクションを送信するために最初の場所で店に接続する必要がありますか?コンポーネントのレンダリングでストア内の変更をリッスンする必要がある場合にのみ、ストアに接続する必要があります。 –

+0

"プレゼンテーションコンポーネントがコンテナコンポーネントを呼び出しています"。 Dan Abramovがこれはいいと言っています(https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ssq4o7wml) –

答えて

1

あなたは3つのオプションがあります。

  • まず、直接店舗にボタンコンポーネントを接続し、それが両方のコンテナ&プレゼンテーション構成要素とすることができるようにすることです。シンプルで効果的。

    export default connect(mapStateToProps, mapDispatchToProps)(ButtonComponent)

    Reduxのhereの作成者(第四ポスト)

  • からの例を参照してください第二には、ボタンをラップし、ボタンはプレゼンテーションのみであるとするために、コンテナを作成することです - あなたの現在の実装を。非常に良い階層化されたアーキテクチャですが、この時点で私にとっては重視されています。

  • 第3は、アクションをHeaderComponentContainerからButtonComponentに引き渡すことです。


すでにあなたのHeaderComponentContainerを接続し、親として、その子が提供するべき機能を決定するためにその責任ですので、ボタンは、これ以上の2以上のレベルの深さであるならば、私は三番目のために行くだろう(彼らだけが存在する、右?)。

PS。 React's contextを使用すると、各コンポーネントに対して明示的に行うことなく、階層内の任意の深さでアクション/プロパティを渡すことができます。

+0

私が正しいと理解していれば、私が持っている現在の実装は基本的に2番目です。ボタンコンポーネントをラップするコンテナコンポーネントを作成します。右の音ですか?私はそれが有効なパターンであることを確認したかっただけです。 – kidcapital

+0

私は、プレゼンテーションコンポーネントで '@ connect'を使うことを好みます。 [理由](http://stackoverflow.com/a/40711713/5069226)を参照してください。 –

関連する問題