Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不改变状态的情况下对重复操作作出反应_Javascript_Redux_Redux Thunk - Fatal编程技术网

Javascript 如何在不改变状态的情况下对重复操作作出反应

Javascript 如何在不改变状态的情况下对重复操作作出反应,javascript,redux,redux-thunk,Javascript,Redux,Redux Thunk,在不改变状态的情况下,如何使redux操作产生效果 我正在将现有代码移植到redux:单击注销按钮时,现有函数logout()发出AJAX请求,注销用户。如果该请求失败,它将调用alert('Logout failed')在移植的代码中,注销按钮调用操作创建者,该创建者使用redux thunk实现: 导出函数注销(电子邮件、传递、回调){ 返回功能(调度){ axios.get(“/logout”) .then(函数(响应){dispatch({type:'LOGOUT_SUCCESS'})}

在不改变状态的情况下,如何使redux操作产生效果

我正在将现有代码移植到redux:单击注销按钮时,现有函数
logout()
发出AJAX请求,注销用户。如果该请求失败,它将调用
alert('Logout failed')
在移植的代码中,注销按钮调用操作创建者,该创建者使用
redux thunk
实现:

导出函数注销(电子邮件、传递、回调){
返回功能(调度){
axios.get(“/logout”)
.then(函数(响应){dispatch({type:'LOGOUT_SUCCESS'})})
.catch(函数(错误){dispatch({type:'LOGOUT_FAILURE',message:error.response.data}});
};
}
reducer处理
注销\u SUCCESS
操作,并直接从状态中删除用户对象。但是我是否应该处理故障案例并触发
警报()

  • 动作创建者可以调用
    alert()
    ,但不知何故,我觉得这不是正确的位置
  • 减速器可以调用
    alert()
    并返回相同的状态。。。但这似乎是个坏主意,因为减缩器应该是没有副作用的纯函数
  • reducer可以返回类似于
    {messages:['Login failed']}
    的状态,代码的其他部分可以对此做出反应,抛出警报并调用另一个操作来从状态中删除消息。但这似乎不必要地复杂

如果您希望通过事件触发操作,但不更改状态,并且希望将其保留在操作创建者之外,那么在这种情况下,什么样的模式才有意义呢?

如果登录失败时发生的唯一事情是警报,只需在那里的函数中调用它即可

记住,react只是简单的JavaScript,不要试图强迫自己进入意识形态;这些模式是指导方针而不是规则

您可能希望签出,它以比thunks更具声明性的方式处理redux的副作用