Javascript 在使用React的Flux体系结构中执行异步调用时,最佳做法是什么?

Javascript 在使用React的Flux体系结构中执行异步调用时,最佳做法是什么?,javascript,facebook,reactjs,redux,flux,Javascript,Facebook,Reactjs,Redux,Flux,我在React/Redux上工作了大约两年,但我目前参与了一个React应用程序,它使用Facebook的Flux而不是Redux进行状态管理。所以我开始阅读关于通量和Redux的区别。我偶然发现了一些我不完全理解的东西,也许这里有人能够“讨论”一下这件事 在Facebook关于reduceStore的reduce方法的Flux文档中,他们声明“此方法应该是纯的,并且没有副作用”(这听起来很像Redux-pure函数中的reducer方法)。但是在他们自己的示例中:fluxAsync(),他们引

我在React/Redux上工作了大约两年,但我目前参与了一个React应用程序,它使用Facebook的Flux而不是Redux进行状态管理。所以我开始阅读关于通量和Redux的区别。我偶然发现了一些我不完全理解的东西,也许这里有人能够“讨论”一下这件事

在Facebook关于reduceStore的reduce方法的Flux文档中,他们声明“此方法应该是纯的,并且没有副作用”(这听起来很像Redux-pure函数中的reducer方法)。但是在他们自己的示例中:fluxAsync(),他们引入了DataManager,它处理API调用。在他们的示例中,这个管理器是从reduce方法中调用的。因此,他们自己的例子中的reduce方法会产生副作用,使其成为非纯函数

这里的最佳实践是什么?你自己用什么?这些杂质应该放在哪里

我受“Redux”启发的方法是创建一个从视图调用的动作创建者(如Redux中),该方法执行异步API调用,然后分派动作。因此,为了澄清我的方法,我将从存储中删除抓取逻辑(副作用),并将其放入某个action creator方法中

sudo代码中的action creator如下所示:

getSomedata(param){
    dispatch({type: GET_SOME_DATA_FETHCING})
    doApiCallAsync()
    .then( () =>{dispatch({type: GET_SOME_DATA_SUCCESS, result: json.result})})
    .catch( () =>{dispatch({type: GET_SOME_DATA_FAILURE})})
}

与Redux不同,Flux根本不限制您处理异步操作的方式。最佳做法可能不存在;这取决于开发者的品味。这是Flux中的官方异步示例:

如您所见,它通过商店中的
todoatamanager
调用API,如或;它不使用动作创建者。在
ToDodatManager
中,它还发送操作。就我个人而言,我真的不喜欢这种方法,或者。。。比方说我不喜欢通量

事实上,我正在将Flux应用程序迁移到Redux。旧的Flux应用程序使用类似的方法,它使用事件发射器通知组件存储更改。代码库一团糟


如果我必须使用flux,我将使用与您相同的方法,这将明确划分职责,并使代码库更易于推理。但是如果迁移到Redux是一个选项,我无论如何都会选择Redux。

如果可能的话,我会迁移到Redux,但目前还没有。我在Facebook自己的文档中发现了一个特别奇怪的事实,即他们声明reduce函数应该是纯函数,但在他们自己的示例中,他们并没有保持它的纯-当他们甚至不能遵循自己的声明时,那些不在Facebook工作的凡人应该如何做出选择。无论如何,谢谢你的回答!