![](/img/trans.png)
[英]Change state's array without changing the whole state (REACT / 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()
,但不知怎的,我覺得這不是正確的地方 alert()
並返回相同的狀態......但這似乎是一個壞主意,因為reducers應該是純函數,沒有副作用。 {messages: ['Login failed']}
的狀態,代碼的其他部分可以對此作出反應,拋出警報並調用另一個從狀態中刪除消息的操作。 但這似乎不必要地復雜。 對於您希望通過事件觸發操作而不是更改狀態,並且您希望將其保留在操作創建者之外的情況,哪種模式有意義?
如果登錄失敗時唯一發生的事情是警報,只需在那里的函數中調用它即可。
請記住,反應只是簡單的JavaScript,不要試圖強迫自己進入意識形態; 這些模式是指導而非規則。
你可能想看一下redux-saga
,它以比thunk更具聲明性的方式處理redux副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.