首页 > 解决方案 > Redux Thunk - 是否可以取消 setTimeout

问题描述

我想实现一个通知系统,在用户发出 API 请求后创建一条消息。但是我不想在屏幕上创建多条消息,并且想取消以前的消息,只显示最近的一条。最近了解了 thunk 及其使用,想知道是否可以取消 setTimeout 或者是否有更好的方法来实现它。

这是我计划使用的 thunk 消息。

export const startNotification = (message) => {
  return dispatch => {
    setTimeout(() => {dispatch(notificationMessage(message))}, 5000);
  };
};

我不确定解决此问题的方法。我正在考虑的一种方法是更新我的减速器以处理多条消息,但似乎这会使减速器过于复杂。理想情况下,我想取消任何现有的超时,然后再次调用函数。有没有办法实现这一点,或者有没有更好的替代我想要实现的目标?

标签: reactjsreduxreact-reduxredux-thunk

解决方案


setTimeout()返回一个可以取消的句柄clearTimeout(),所以这是一种选择。

但是,我建议清除减速器中以前的消息。每当您的通知缩减程序收到一条新消息时,它就可以摆脱任何其他消息。

如果您最终使用了,您可以在https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeoutclearTimeout()找到有关它的更多信息


推荐阅读