RefluxJS商店可以在调用trigger()时指出哪个属性已更改?

时间:2015-03-14 11:04:36

标签: javascript reactjs reactjs-flux flux refluxjs

我是整个Flux的新手,但是我试图通过从Reflux开始抓住它,这看起来更加自以为是,更容易学习。

据我所知,Reflux商店有trigger方法,表示商店的数据已更改,并将更新的数据传递给它。然后可以使用Reflux.connect mixin或类似方法将此数据设置为React组件的状态(或作为状态属性之一)。

但是,如果商店有多组数据需要单独收听呢?假设我正在修改TodoMVC RefluxJS example,我希望TodoStore也包括一个title属性,指示待办事项列表的名称(以及list,TODO项目列表)。假设还有一个<Title>组件正在侦听title属性的更改,并将title设置为其状态。

this.trigger(title)的调用会更新标题组件,但也会导致todo组件尝试使用标题字符串作为其状态,因此我们需要一种方法来指示哪些数据已被更改。这两个属性(titlelist)是否应该分成不同的商店?或者,对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次调用?

1 个答案:

答案 0 :(得分:2)

(1)非常重要的存储广播数据更改事件到订阅的顶级视图组件。(所谓的控制器视图,如http://facebook.github.io/flux/docs/overview.html中所述)。

(2)可重复使用的组件,如List,Title等。是自我完成的,这些组件不应该理解存储数据结构。使用属性而不是setState来显示数据。

(3)您是否真的希望商店拥有不同类型的数据,或者数据是否属于不同的商店。

(4)如果商店必须持有不同类型的数据,我的偏好不是&#34;过滤&#34;按行动类型。为简单起见,请更新收听商店的所有视图组件。