3

私は Flux 全体に慣れていませんが、Reflux から始めて理解を深めようとしています。

私が理解しているように、Refluxストアにtriggerは、ストアのデータが変更されたことを示すメソッドがあり、更新されたデータをそこに渡します。このデータは、 Reflux.connect mixin または同様のメソッドを使用して、React コンポーネントの状態として (または状態のプロパティの 1 つとして) 設定できます。

しかし、ストアに個別にリッスンする必要がある複数のデータ セットがある場合はどうなるでしょうか。TodoMVC RefluxJS exampletitleを変更していて、TodoStore にtodo リスト (listおよび TODO アイテムのリスト)の名前を示すプロパティも含めたいとします。プロパティ<Title>への変更をリッスンし、変更時に をその状態として設定するコンポーネントもあるとします。titletitle

を呼び出すとthis.trigger(title)、タイトル コンポーネントが更新されますが、todo コンポーネントはタイトル文字列を状態として使用しようとするため、どのデータが変更されたかを示す方法が必要です。これら 2 つのプロパティ (titlelist) を別のストアに分ける必要がありますか? または、すべての呼び出しにtrigger、プロパティを示す文字列を含める必要があります:this.trigger("title", this.title)またはthis.trigger("todos", this.list). それとも、すべてのデータを 1 つのオブジェクトに結合して、リスナーが (たとえば を使用してReflux.connectFilter) 選択する必要がありますか?

this.trigger("todos", {
    todos: this.list,
    title: this.title
});

これらの最後の 2 つの例では、ストアから返されたデータを取得し、コンポーネントの状態をそれに直接設定するため、this.trigger()呼び出しに新しいデータが導入されます。これはReflux.connect、これ以上使用できないことを意味します。connectこれは、 を使用Reflux.listenTo(TodoStore,"onTodoChange")して、triggerこのコンポーネントに関係のない呼び出しを除外する必要があるということですか?

4

1 に答える 1

2

(1) その非常に重要なストアは、サブスクライブされた最上位のビュー コンポーネントにデータ変更イベントをブロードキャストします ( http://facebook.github.io/flux/docs/overview.htmlで説明されている、いわゆるコントローラー ビュー)。

(2) リスト、タイトルなどの再利用可能なコンポーネント。これらのコンポーネントはストアのデータ構造を理解するべきではありません。表示データには setState の代わりにプロパティを使用します。

(3) 本当にストアに別のタイプのデータを保持させたいのか、それともデータが別のストアに属しているのか。

(4) ストアが異なるタイプのデータを保持する必要がある場合、私の好みはアクション タイプで「フィルタリング」することではありません。簡単にするために、ストアをリッスンするすべてのビュー コンポーネントを更新します。

于 2015-03-14T14:36:48.023 に答える