【发布时间】:2017-06-03 22:12:43
【问题描述】:
我已经使用 React/Redux 大约两年了,但我目前正在参与一个使用 Facebook 的 Flux 而不是 Redux 进行状态管理的 React 应用程序。所以我开始阅读 Flux 以及与 Redux 的区别。我偶然发现了一些我不完全理解的东西,也许这里有人能够“讨论”一下这个问题!
在 Facebook 的关于 reduceStore 的 reduce 方法的 Flux 文档中,他们声明“这个方法应该是纯的并且没有副作用”(这听起来很像 Redux 中的 reducer 方法 - 纯函数)。但在他们自己的示例中:Flux async (https://github.com/facebook/flux/tree/master/examples/flux-async),他们引入了处理 API 调用的 DataManager。在他们的示例中,该管理器是从 reduce 方法中调用的。因此,他们自己示例中的 reduce 方法会产生副作用,使其成为非纯函数。
这里的最佳做法是什么?而你自己用什么?这些杂质应该放在哪里?
我的“Redux”启发方法是创建一个从视图调用的动作创建器(如在 Redux 中),此方法执行异步 API 调用,然后调度动作。因此,为了澄清我的方法,我会将获取逻辑(副作用)从 store 中移除,转而使用一些 action-creator 方法。
sudo 代码中的动作创建者看起来像这样:
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})})
}
【问题讨论】:
标签: javascript facebook reactjs redux flux