1つは順次waitFor
データフロー用、もう1つは並列データフロー用です。同じデータを保持しないようにデータ ストアをモデル化しようとしています (つまり、二重のメンテナンス データ)。
基本的に、データ ストアは 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) { // passed on from carsStore trigger
this.trigger(this.getModels(cars)); // pass on the models
}
getModels: function(cars) {
return _.unique(_.map(cars, function(car) { return car.model; }));
}
});
そうすれば、React ビュー コンポーネントは 1 つを使用して車を取得し、もう 1 つを使用してモデルを取得できます。モデルは から集約されますcarStore
。
ストアが 2 つの並列データ ストリームが完了するのを待つ必要がある場合、Reflux.all
アクションとストアを結合する を提供します。これは、別の REST リソースからデータがロードされるのを待っている場合などに便利です。
var carsAndPartsAreLoaded = Reflux.all(carStore, partsStore);
// you may now listen to carsAndPartsAreLoaded
// from your data stores and components
これがあなたにとって理にかなっていることを願っています。