20

アクションを定期的にディスパッチする方法/場所は? 再帰setTimeoutを使用してカウントダウンを作成します。

例から取得すると、次のようになります。

// Can also be async if you return a function
export function incrementAsync() {
  return dispatch => {
    (function _r() {
      setTimeout(() => {
        // Yay! Can invoke sync or async actions with `dispatch`
        dispatch(increment());
        _r();
      }, 1000);
    })();
  };
}

これは良い考えですか、それともミドルウェアを使用するか、別の場所からアクションを作成するなど、この問題に対するより良いアプローチがありますか?

私はストアを介してタイマーの開始/停止を制御できる、これの汎用バージョンを好みます。

サンプル実装をセットアップしましたhttps://gist.github.com/eguneys/7023a114558b92fdd25eをご覧ください

4

2 に答える 2

18

少し複雑ですが、あなたが提案するアプローチは問題ありません。一般に、コンポーネントのライフサイクル メソッド (例: componentDidMount/ componentWillUnmount) 内で間隔を設定し、アクションが他のアクションに間隔を設定することは避けます。

この柔軟性が絶対に必要な場合は、Rxを非同期管理に使用dispatchし、オブザーバブル チェーンの最後にあるアクションを使用することをお勧めします。このようにして、Redux が輝く場所 (同期更新) を使用し、非同期構成を Rx に任せます。

于 2015-10-03T11:02:24.380 に答える