2016-04-11 12 views
22

現在、別のコンポーネントでディスパッチした後のデータ変更に基づいてコンポーネントのアクションをディスパッチする方法を概念化しようとしています。状態の更新中>プロパティ -アクションがディスパッチされた後にReduxストアの特定のプロパティ変更をリッスンする方法

dispatch(someAjax)

は、このシナリオを取ります。

この後、この同じプロパティに依存する別のコンポーネントが必要です。これは、新しい値に基づいてアクションが更新され、ディスパッチされることを知るためです。

何らかのタイプのvalue.on(change...ソリューションを使用するのではなく、このタイプのアクションをカスケード処理するための好ましい方法は何ですか?

答えて

21

アクションの実行後に状態を比較するミドルウェアか、Reduxの低レベルのstore.subscribe APIを使用するという、2つの基本的な方法があります。

Redux FAQはan answer that covers thisです。また、私はRedux関連のアドオンとユーティリティのリストを保管しており、データ変更のリスニングにさまざまなアプローチを実装しているexisting store change subscription librariesのグループが含まれています。

+0

おかげで、それは本当に便利です。私が実際に理解しようとしているのは、いくつかのデータがAJAX呼び出しから戻ってきたこと、そしてXキーが変更されたことをいくつかのコンポーネントに通知する最も良い方法です。これらのコンポーネントのそれぞれは、おそらく自分の行動を起こすでしょう。私はミドルウェアの変更を見ることができますが、私が把握しようとしている部分は、変更が検出されたときに何をすべきかです。私はある種のイベントバスが必要だと思っていますが、それはReduxで正しく感じられません。そこにどんなアドバイス? – Jazzy

+0

ReactとReduxでのコミュニケーションの主な推奨アプローチは、親が子どもに小道具を渡し、コールバックを実行して親に通知する子どもです。しかし、イベントバスのような他のアプローチも確かにその用途を持っており、イベントバスがあなたのユースケースに合っていれば、それに行きましょう。例については、http://ctheu.com/2015/02/12/how-to-communicate-between-react-components/とhttp://andrewhfarmer.com/component-communication/を参照してください。 – markerikson

+2

質問に具体的に答えなかったけれども、あなたのリストの最初の項目が私の場合に役立ちました。 redux-watchは、この機能を簡単かつ創造的に実現する方法です。リストのおかげで再び、それは有用です。 – Jazzy

19

ReduxのconnectcomponentDidUpdate(prevProps)またはcomponentWillUpdate(nextProps)フックでmapStateToPropsを使用できます。

だから基本的にあなたのコードは次のようになります。そのリストの

const mapStateToProps = (state) => ({ 
    specificProperty: state.specificProperty, 
    // any props you need else 
}); 

class YourComponent extends React.Component { 
    render() { 
     // render your component 
    } 

    componentWillUpdate(nextProps) { 
     if (nextProps.specificProperty !== this.props.specificProperty) { 
      // Do whatever you want 
     } 
    } 
} 

YourComponent = connect(mapStateToProps)(YourComponent); 
+0

これらの関数はreact-reduxの一部であるため、Reactを使用する場合にのみ使用できます。 –

+0

提供されたタグに適合し、次に – hellogoodnight

+1

ニース。また、タイプミスがありますか? 'nextProps.specificProperty!== this.props.specificProperty'を意味しますか? – python1981

関連する問題