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 回答
-1

有一篇很棒的Medium 帖子涵盖了这个问题。

Gustavo Machado提供了componentDidMount/componentWillMount解决方案和dispatchinredux选项的示例。

它帮助了我,所以你可能想检查一下。

于 2019-09-17T13:17:33.627 回答