作为一个整体,我是 Flux 的新手,但我试图从 Reflux 开始掌握它,这似乎更固执己见,更容易学习。
据我了解,Reflux 商店有一种trigger
方法可以指示商店的数据已更改,并将更新的数据传递给它。然后可以使用Reflux.connect mixin 或类似方法将此数据设置为 React 组件的状态(或状态的属性之一)。
但是,如果一个商店有多组数据需要分别收听呢?假设我正在修改 TodoMVC RefluxJS 示例,并且我希望 TodoStore 还包含一个title
属性,该属性指示待办事项列表(以及待办事项列表list
)的名称。假设还有一个<Title>
组件正在侦听属性的更改,并在它发生时将其title
设置为状态。title
调用this.trigger(title)
将更新标题组件,但也会导致待办事项组件尝试使用标题字符串作为其状态,因此我们需要一种方法来指示哪些数据已更改。是否应该将这两个属性 (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
该组件无关的调用?