【问题标题】:Would it be possible to implement a setTimeout in the Redux Store?是否可以在 Redux Store 中实现 setTimeout?
【发布时间】:2019-07-11 16:54:19
【问题描述】:

我想知道是否可以在 Redux Store 中存储 setTimeout 并让 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 中的纯函数,我不确定我们是否可以取消超时

【问题讨论】:

  • 你想达到什么目的?
  • @SultanH。我希望消息在一定时间后弹出消息,但如果用户关闭消息则重置
  • 您已经拥有它们了吗?就像要一个接一个显示的消息数组?还是分开来的?
  • 他们将分开来

标签: reactjs redux react-redux settimeout


【解决方案1】:

动作必须是普通对象,没有副作用。要调度异步操作,您应该使用自定义中间件,例如 redux-sagaredux-thunkredux-thunk 的异步操作示例:

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

【讨论】:

  • 使用中间件,是否可以在设定的时间后调度一个动作,或者只调度类似于你的例子的东西?
  • 谢谢!所以有了这个,我可以调用 storeUsers 来发送延迟的动作,对吗?
  • 可以,但是你必须先配置redux-thunk。检查this article
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2019-07-22
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多