我是整个Flux的新手,但是我试图通过从Reflux开始抓住它,这看起来更加自以为是,更容易学习。
据我所知,Reflux商店有trigger
方法,表示商店的数据已更改,并将更新的数据传递给它。然后可以使用Reflux.connect mixin或类似方法将此数据设置为React组件的状态(或作为状态属性之一)。
但是,如果商店有多组数据需要单独收听呢?假设我正在修改TodoMVC RefluxJS example,我希望TodoStore也包括一个title
属性,指示待办事项列表的名称(以及list
,TODO项目列表)。假设还有一个<Title>
组件正在侦听title
属性的更改,并将title
设置为其状态。
对this.trigger(title)
的调用会更新标题组件,但也会导致todo组件尝试使用标题字符串作为其状态,因此我们需要一种方法来指示哪些数据已被更改。这两个属性(title
和list
)是否应该分成不同的商店?或者,对trigger
的所有调用都应包含指示属性的字符串:this.trigger("title", this.title)
或this.trigger("todos", this.list)
。或者是否应将所有数据合并为一个对象,然后由听众选择(例如使用Reflux.connectFilter
)?
this.trigger("todos", {
todos: this.list,
title: this.title
});
最后两个示例向this.trigger()
调用引入了新数据,这意味着Reflux.connect
不能再使用了,因为connect
获取从商店返回的数据并直接设置组件说明它。这是否意味着我们必须使用Reflux.listenTo(TodoStore,"onTodoChange")
,然后过滤掉与此组件无关的trigger
次调用?
答案 0 :(得分:2)
(1)非常重要的存储广播数据更改事件到订阅的顶级视图组件。(所谓的控制器视图,如http://facebook.github.io/flux/docs/overview.html中所述)。
(2)可重复使用的组件,如List,Title等。是自我完成的,这些组件不应该理解存储数据结构。使用属性而不是setState来显示数据。
(3)您是否真的希望商店拥有不同类型的数据,或者数据是否属于不同的商店。
(4)如果商店必须持有不同类型的数据,我的偏好不是&#34;过滤&#34;按行动类型。为简单起见,请更新收听商店的所有视图组件。