Можно ли реализовать setTimeout в магазине Redux? - PullRequest
0 голосов
/ 11 июля 2019

Мне было интересно, можно ли сохранить setTimeout в Redux Store и заставить setTimeout вызвать четное число. Из того, что я узнал, действия - это объекты javascript, но я не уверен, как они будут взаимодействовать с магазином.

Сначала я думал что-то вроде этого

const timer = setTimeout(() => {someFunc}, 1000);

Действие:

const t = (timer) => {
  return {
    type:TIMER_START,
    timer
  }
};

Редуктор:

tReducer = (state={timer:null}, action) => {
  switch(action.type) {
    case TIMER_START:
      return {...state, timer: action.timer}
    default:
      return state;
  }
};

Будет ли это правильным способом реализации тайм-аута в магазине? И если да, можно ли отменить тайм-аут? Поскольку в Redux нам нужны чистые функции, я не уверен, сможем ли мы отменить тайм-аут

1 Ответ

0 голосов
/ 11 июля 2019

Действия должны быть простыми объектами, без побочных эффектов. Для отправки асинхронных действий вы должны использовать пользовательское промежуточное ПО, например redux-saga или redux-thunk. Пример асинхронного действия с redux-thunk:

const storeUsers = () =>{
    return dispatch =>{
        setTimeOut(() => dispatch({type: 'SENDED_AFTER_3_SECONDS'}), 3000)
    }
}
...