假设您有一个 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 中间件提供了更大的灵活性。它使您能够调度返回操作的函数:
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 也是允许您读取当前状态store:
export function showNotificationWithTimeout(text) { return function (dispatch, getState) { if (!getState().areNotificationsEnabled) { return; } // ... }; }
使用满足您需求的最简单方法。 Thunk 提供了高级异步功能,但可能并非在所有情况下都是必需的。
以上是如何在超时情况下调度 Redux 操作?的详细内容。更多信息请关注PHP中文网其他相关文章!