繁体   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