在
refluxjs 中,我们通过两种方式解决了
waitFor
问题,一种是用于顺序数据流,另一种是用于并行数据流。我试图以一种避免持有相同数据的方式来对数据存储进行建模(即避免重复维护数据)。
基本上,数据存储是CQRS组件,并且我尝试避免让2个数据存储最终拥有相同类型的数据。如果我需要以某种方式转换数据,只有一些组件需要这样做,我会将其拆分为“聚合”数据存储。简单实现:
var carsStore = Reflux.createStore({
init: function() {
this.listenTo(Actions.updateCars, this.updateCallback);
},
updateCallback: function() {
$.ajax('/api/cars', {}).done(function(data) {
this.trigger(data.cars);
}.bind(this));
}
});
我们可以创建另一个数据存储来通过监听
carsStore
聚合数据:
var modelsStore = Reflux.createStore({
init: function() {
this.listenTo(carsStore, this.carsCallback);
},
carsCallback: function(cars) {
this.trigger(this.getModels(cars));
}
getModels: function(cars) {
return _.unique(_.map(cars, function(car) { return car.model; }));
}
});
那么你的React视图组件可以使用其中一个来获取汽车,使用另一个来获取从“carStore”汇总的型号。
如果一个存储需要等待两个并行数据流完成,我们提供了“Reflux.all”来连接动作和存储。例如,如果您正在等待从不同的REST资源加载数据,则这非常有用。
var carsAndPartsAreLoaded = Reflux.all(carStore, partsStore);
希望这对您有所帮助。