嵌套异步获取状态的React组件会导致Flux分发链
Nesting React components which fetch state asynchronously causes Flux dispatch chain
当我有多个异步请求的数据,我怎么能保证响应不会发生在同一个事件循环?这些响应都将触发动作创建者的调度,从而在调度消息中进行调度。
请注意,数据不依赖于,所以使用waitFor()
不会做任何事情。
例如,两个组件:
let Post = React.createClass({
getInitialState () {
return {
post: PostStore.getPost(postID) //This triggers an API call
}
},
render () {
return (
<Authors/>
);
}
});
let Authors = React.createClass({
getInitialState () {
return {
authors: UserStore.getAuthors() //This also triggers an API call
}
}
});
每次都得到dispatch within a dispatch
不变。现在,如果我要引导数据或将UserStore.getAuthors()
调度置于setTimeout(func, 0)
黑客之后,它将工作得很好,因为它强制第二个API调用在下一个事件循环上调度。然而,我确信在某个时候我将再次遇到这个问题。例如,如果我有一个twitter feed,它通过API请求对民意调查进行更新,该怎么办?我如何保证API请求不会返回并干扰另一个调度?
我可以这样引导数据:
PostStore.initialize(window.posts);
UserStore.initialize(window.users);
为什么不在分派不变式中创建分派?这不是同时发送两封邮件吗?
更新11/16/15
我已经切换到Redux,它是更好的Flux实现,解决了很多这些问题。
我使用这个实现,所以所有的调度都是排队的,我从来没有遇到任何问题:
var Dispatcher = require('flux').Dispatcher;
var assign = require('object-assign');
var Constants = require('Constants');
var async = require('async');
var PayloadSources = Constants.PayloadSources;
var dispatcher = new Dispatcher();
var queue = async.queue( function (task, callback) {
var payload = {
source:PayloadSources[task.source],
action: task.action
};
AppDispatcher.dispatch(payload);
callback();
}, 1);
var AppDispatcher = assign(dispatcher, {
handleServerAction: function (action) {
queue.push({source : 'SERVER_ACTION', action : action});
// console.log(queue);
},
handleViewAction: function (action) {
queue.push({source: 'VIEW_ACTION', action : action});
// console.log(queue);
}
});
module.exports = AppDispatcher;
相关文章:
- 将可重复使用的组件与ReactJs和Flux一起用于多个存储
- 在Flux中处理同一组件的多个实例
- React/flux - 子组件用户事件 - 是否应通过调度程序路由所有内容
- 如何处理 React / Flux 组件中的状态转换
- React & Firebase + Flux:子组件不渲染
- React组件从Flux存储中呈现数据,但从Mongo数据库中提取数据时不呈现
- 如何使用 Flux+React.js 从数据库回调渲染组件
- Flux+React:何时在商店中保持视觉组件的状态
- 组件应在哪个嵌套级别从 Flux 中的存储中读取实体
- Flux存储将更改发送到特定的反应组件,而不是所有组件
- 当React/Flux中有几个小的、可重复的子组件时,如何管理组件渲染
- React/Flux:从组件的渲染方法中触发一个动作,或者从组件中执行一个Rest调用
- React原生路由器flux:覆盖组件内部的左键或右键,并访问本地功能
- 嵌套异步获取状态的React组件会导致Flux分发链
- 在组件中利用spinJS的Flux/ReactJS
- React + Flux——将输入绑定到单个“模型”的嵌套组件
- React/Flux实现技术不清楚父组件何时需要在子组件上拉字符串
- Flux——直接调用store的组件
- Flux:如何为可变数量的React组件创建store
- 在React + Flux中从服务返回到组件的回调