首页 > web前端 > js教程 > 如何在超时情况下调度 Redux 操作?

如何在超时情况下调度 Redux 操作?

Linda Hamilton
发布: 2024-12-06 20:10:17
原创
627 人浏览过

How to Dispatch Redux Actions with Timeouts?

使用超时调度 Redux 操作

问题

假设您有一个 Redux 应用程序来管理通知、显示错误或信息警报等消息。您希望在一定时间(例如 5 秒)后自动关闭这些通知。

解决方案:内联异步代码

最简单的方法是直接使用 setTimeout:

store.dispatch({ type: 'SHOW_NOTIFICATION', text: 'You logged in.' });
setTimeout(() => {
  store.dispatch({ type: 'HIDE_NOTIFICATION' });
}, 5000);
登录后复制

解决方案:提取异步操作创建者

为了避免重复和竞争条件,请考虑提取操作创建者:

function showNotificationWithTimeout(dispatch, text) {
  const id = nextNotificationId++;
  dispatch(showNotification(id, text));

  setTimeout(() => {
    dispatch(hideNotification(id));
  }, 5000);
}
登录后复制

然后在组件中使用:

showNotificationWithTimeout(this.props.dispatch, 'You just logged in.');
登录后复制

解决方案:使用 Thunk 中间件

Thunk 中间件提供了更大的灵活性。它使您能够调度返回操作的函数:

export function showNotificationWithTimeout(text) {
  return function (dispatch) {
    const id = nextNotificationId++;
    dispatch(showNotification(id, text));

    setTimeout(() => {
      dispatch(hideNotification(id));
    }, 5000);
  };
}
登录后复制

然后您可以直接调度 thunk 操作创建者:

this.props.dispatch(showNotificationWithTimeout('You just logged in.'));
登录后复制

Thunk 中的阅读状态

Thunk 也是允许您读取当前状态store:

export function showNotificationWithTimeout(text) {
  return function (dispatch, getState) {
    if (!getState().areNotificationsEnabled) {
      return;
    }

    // ...
  };
}
登录后复制

建议

使用满足您需求的最简单方法。 Thunk 提供了高级异步功能,但可能并非在所有情况下都是必需的。

以上是如何在超时情况下调度 Redux 操作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板