首頁 >web前端 >js教程 >如何在超時情況下調度 Redux 操作?

如何在超時情況下調度 Redux 操作?

Linda Hamilton
Linda Hamilton原創
2024-12-06 20:10:17617瀏覽

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 中的閱讀狀態

Thunkunk也是允許您讀取當前狀態store:

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

    // ...
  };
}

建議

使用滿足您需求的最簡單方法。 Thunk 提供了高級非同步功能,但可能並非在所有情況下都是必需的。

以上是如何在超時情況下調度 Redux 操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn