Подтвердить что ты не робот

Как запускать периодические действия с помощью setTimeout и диспетчера в сокращении

Как/Где я могу периодически отправлять действия? Использование рекурсивного 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

4b9b3361

Ответ 1

Подход, который вы предлагаете, хорош, хотя и немного запутан. В общем, я бы установил интервалы внутри методов жизненного цикла компонентов (например, componentDidMount/componentWillUnmount) и избегал действий, задающих интервалы для других действий.

Если вам абсолютно нужна эта гибкость, лучше использовать Rx для управления асинхронным управлением и dispatch действия в самом конце наблюдаемой цепочки, Таким образом вы используете Redux, где он сияет (синхронные обновления), и оставляйте асинхронную композицию в Rx.