【发布时间】:2015-08-02 03:22:00
【问题描述】:
在我的 Flux 架构 React 应用程序中,我正在从存储中检索数据,并且希望创建一个操作来请求该信息(如果它不存在)。但是,我遇到了调度程序已经在调度的错误。
我想要的代码是这样的:
getAll: function(options) {
options = options || {};
var key = JSON.stringify(options);
var ratings = _data.ratings[key];
if (!ratings) {
RatingActions.fetchAll(options);
}
return ratings || [];
}
但是,当调度程序已经在调度操作时,会间歇性地失败,并显示消息Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.。我经常提出请求以响应应用程序状态的变化(例如日期范围)。为了响应来自AppStore 的更改事件,我发出请求的组件具有以下内容:
getStateFromStores: function() {
var dateOptions = {
startDate: AppStore.getStartISOString(),
endDate: AppStore.getEndISOString()
};
return {
ratings: RatingStore.getAll(dateOptions),
};
},
我知道事件链是一种 Flux 反模式,但我不确定哪种架构更适合检索尚不存在的数据。目前我正在使用这个可怕的黑客:
getAll: function(options) {
options = options || {};
var key = JSON.stringify(options);
var ratings = _data.ratings[key];
if (!ratings) {
setTimeout(function() {
if (!RatingActions.dispatcher.isDispatching()) {
RatingActions.fetchAll(options);
}
}, 0);
}
return ratings || [];
},
什么是更好的架构,可以避免事件链或调度程序错误?这真的是事件链吗?我只是想根据应用程序设置的参数更改数据。
谢谢!
【问题讨论】:
-
这是我从 Flux 切换到 Redux 的原因之一。
-
@ian-walker-sperber 这个问题已经被浏览了很多次。你有没有机会选择正确的答案?
-
@RyanRho 你如何处理乱码?
标签: javascript reactjs reactjs-flux