2017-07-28 4 views
0

1つのレデューサーに対して複数のアクションをディスパッチする場合は、 showの方が良いかもしれません。提供された例で単一レデューサーに対して複数のアクションを順番にディスパッチしても、接続されたコンポーネントの状態の変化は反映されません。

いくつかの注意は:

  1. Appコンポーネントは、それがredirectPath小道具だの更新の歴史を反映しています。 nullとなると、no redirectという文字列が履歴に追加されます。
  2. アクションに応じて、平方だけを返します。またはnullです。
  3. ボタンを押すことにより、Do redirectの両方の操作(SET_REDIRECTCLEAR_REDIRECT)が変更された状態をAppContainerコンポーネントに提供すると期待しています。しかし、最新のもの(CLEAR_REDIRECT)だけがnull値のレンダリングメソッドをトリガーします。
  4. これらのアクションをディスパッチする間にわずかな遅延が加えられると、両方ともコンポーネントのレンダリングをトリガーします。 Do redirect with delayボタンを押すと確認できます。

私はアクションをディスパッチするときsetTimeoutを使用せずにコンポーネントの更新をトリガする状態(SET_REDIRECTCLEAR_REDIRECTアクションによって提供される)の両方の変化を期待します。

ミドルウェアからCLEAR_REDIRECTのディスパッチを移動させたところ、SET_REDIRECTが得られましたが、同じ結果になりました。

何とか予期した動作に到達できますか?

私はそれがreduxの問題だと思ったので、最初に私はreduxに問題を投稿しましたが、@jimbollaは主に反応の設計によるものだと私に説明しました。

reduxチームメンバーhttps://github.com/reactjs/redux/issues/2532の元の問題とコメントを参考にしてください。

答えて

1

render()での状態更新の実行には依存しないでください。 render()で実行されるコードは、ビューを構築するために必要なコードだけです。

componentWillReceivePropsを使用して、コンポーネントが新しいプロパティを受け取るタイミングを追跡できます。

適切なプロパティをリッスンし、受信時にリダイレクトを実行する必要があります。その後、リダイレクトが成功したことを示すプロパティを聴取し、必要に応じて別のコンポーネントの更新をトリガーするリダイレクト状態をクリアするアクションをディスパッチできます。

+0

'あなたはcomponentWillReceiveProps'を使用できます これは正しいポイントです。私もそれに来ました。 – likerRr

関連する問題