![](/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.