Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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 在没有动作创建者和还原者的情况下,我可以在React和Redux中发送AJAX调用吗?_Javascript_Ajax_Reactjs_Redux - Fatal编程技术网

Javascript 在没有动作创建者和还原者的情况下,我可以在React和Redux中发送AJAX调用吗?

Javascript 在没有动作创建者和还原者的情况下,我可以在React和Redux中发送AJAX调用吗?,javascript,ajax,reactjs,redux,Javascript,Ajax,Reactjs,Redux,我有几个ajax请求没有直接操纵我的应用程序状态。在react/redux应用程序中,是否有必要(或有任何好处)为这些ajax请求分派操作,而不是直接在组件中发送ajax请求 为了简化我的场景,我基本上有一个redux状态的对象列表。我正在使用一个表单将一个新对象发布到数据库,发布成功后,我将重定向到列表页面,其中发送GET请求,获取列表并更新状态 发布新对象的AJAX调用并没有直接操纵我的状态 与我一起工作的团队正在经历完整的3步redux异步步骤 例如:'FETCH\u REQUESTED'

我有几个ajax请求没有直接操纵我的应用程序状态。在react/redux应用程序中,是否有必要(或有任何好处)为这些ajax请求分派操作,而不是直接在组件中发送ajax请求

为了简化我的场景,我基本上有一个redux状态的对象列表。我正在使用一个表单将一个新对象发布到数据库,发布成功后,我将重定向到列表页面,其中发送GET请求,获取列表并更新状态

发布新对象的AJAX调用并没有直接操纵我的状态

与我一起工作的团队正在经历完整的3步redux异步步骤
例如:
'FETCH\u REQUESTED'
'FETCH\u SUCCESS'
'FETCH\u FAIL'
以及所有AJAX请求的相应减缩器,添加更多减缩器非常麻烦,而且减缩器似乎没有意义。

您完全可以直接从组件发送AJAX调用

Redux是一种工具,用于使共享状态对多个组件全局可用,并以可预测的方式进行更改。在任何情况下,如果你觉得没有必要,就不要这样做

当不同的组件发出相同的API请求,然后以类似的方式更改状态时,让AJAX调用保持在活动创建者中是很方便的。如果您希望避免在已有一些缓存数据可用时触发请求,并且希望将此类检查保留在单个位置,而不是分散在组件中,那么这种方法也很方便

也就是说,Redux只关心全局状态如何更新,如果您只需要从某个组件发出AJAX请求,则不必为其编写操作创建者或缩减器,除非您觉得方便

一般来说,ReDux(和FLUX)是指当你有很多复杂的组件时,你可以考虑重构你的代码;而不是你应该从每个组件开始。您可以只使用所需的部分(例如,仅使用同步内容),甚至在某些情况下完全避免使用(例如,可折叠面板不必将其状态存储在存储中)。只有当你了解它在特定情况下给你带来的具体好处时才使用它,千万不要“以防万一”或因为它很受欢迎

另见

为了解决您的具体示例,如果您使用Redux提供的好处,您可能希望使用Redux来实现这一点:您可能会发送一个操作以优化表单并立即显示新列表,并在获取的列表可用时将其与之合并,以便交互立即出现。这就是异步操作创建者的用例。如果您不考虑这种用户体验的复杂性,我不确定是否有必要进行重复用户体验。

尝试使用下面的链接


它可以帮助您管理AJAX请求状态,而无需那些冗长的操作和简化程序。

接下来是Dan Abramov的回答——您可能想使用它——它是一个专门为独立组件(如小部件)设计的组件(我刚刚制作的)您不想通过设计连接到全局状态。@DanAbramov只是一个问题:如果您不将可折叠面板状态放入存储中,您将无法从时间旅行和网页包热重新加载中获益,对吗?是的,但您多久花一次时间调试可折叠面板逻辑?;-)