如何将 setInterval 与 redux-thunk 一起使用?

how to use setInterval with redux-thunk?

我正在使用 redux-thunk 来管理异步函数,我想在 action creator 中使用 setInterval,这是我的代码:

export const startLobbyPolling = () => dispatch => {
  const pollTimer = setInterval(() => {
    dispatch(fetchLobby);
  }, POLL_TIME);
  dispatch({ type: START_LOBBY_POLLING, payload: pollTimer });
};

fetchLobby 是另一个简单地获取请求并存储其数据的动作创建器。 但令人惊讶的是它不起作用,因为它只在 redux 调试器工具中显示 START_LOBBY_POLLING 操作,之后什么也没有发生。如果知道如何将 setInterval 与 redux 一起使用,我将不胜感激。

使用 setIntervalredux-thunk 没有什么特别之处。它应该像在其他任何地方一样工作。您需要查看 setInterval.

中使用的回调函数

我建议不要使用 redux 作为轮询管理器。

相反,你应该有一个组件/容器来为你做这件事。原因是,当组件被卸载时,您的轮询也将被正确取消

const PollContainer = ({ fetchLoby, children }) => {
   useEffect(() => {
      const ptr = setInterval(fetchLoby, POLL_TIME)
      return () => clearInterval(ptr)
   }, [fetchLoby])

   return children
}

您现在可以使用您的 PollContainer,只要它已安装,它就会保持 fetchLoby。

看来我应该调用函数而不是将它作为参数传递给 dispatch dispatch(fetchLobby); --> dispatch(fetchLobby()); 现在可以使用了