簡體   English   中英

如何在不改變狀態的情況下對redux動作做出反應

[英]How to react to redux action without changing state

如何在不實際改變狀態的情況下使redux動作產生效果?

我將現有代碼移植到redux:當單擊注銷按鈕時,現有函數logout()會發出一個logout()用戶的AJAX請求。 如果該請求失敗,則調用alert('Logout failed'); 在移植的代碼中,注銷按鈕調用使用redux-thunk實現的動作創建器:

export function logout(email, pass, callback) {
  return function(dispatch) {
    axios.get('/logout')
      .then(function(response) {dispatch({type: 'LOGOUT_SUCCESS'})})
      .catch(function(error) {dispatch({type: 'LOGOUT_FAILURE', message: error.response.data})});
  };
}

reducer處理LOGOUT_SUCCESS操作並從狀態中刪除用戶對象,這是直截了當的。 但是我應該處理故障情況並觸發alert()嗎?

  • 動作創建者可以調用alert() ,但不知怎的,我覺得這不是正確的地方
  • reducer可以調用alert()並返回相同的狀態......但這似乎是一個壞主意,因為reducers應該是純函數,沒有副作用。
  • reducer可以返回類似{messages: ['Login failed']}的狀態,代碼的其他部分可以對此作出反應,拋出警報並調用另一個從狀態中刪除消息的操作。 但這似乎不必要地復雜。

對於您希望通過事件觸發操作而不是更改狀態,並且您希望將其保留在操作創建者之外的情況,哪種模式有意義?

如果登錄失敗時唯一發生的事情是警報,只需在那里的函數中調用它即可。

請記住,反應只是簡單的JavaScript,不要試圖強迫自己進入意識形態; 這些模式是指導而非規則。

你可能想看一下redux-saga ,它以比thunk更具聲明性的方式處理redux副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM