3

作为一个整体,我是 Flux 的新手,但我试图从 Reflux 开始掌握它,这似乎更固执己见,更容易学习。

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

但是,如果一个商店有多组数据需要分别收听呢?假设我正在修改 TodoMVC RefluxJS 示例,并且我希望 TodoStore 还包含一个title属性,该属性指示待办事项列表(以及待办事项列表list)的名称。假设还有一个<Title>组件正在侦听属性的更改,并在它发生时将其title设置为状态。title

调用this.trigger(title)将更新标题组件,但也会导致待办事项组件尝试使用标题字符串作为其状态,因此我们需要一种方法来指示哪些数据已更改。是否应该将这两个属性 (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该组件无关的调用?

4

1 回答 1

2

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

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

(3) 你真的希望 store 保存不同类型的数据,还是数据属于不同的 store。

(4) 如果 store 必须保存不同类型的数据,我的偏好是不按动作类型“过滤”。为简单起见,更新所有监听商店的视图组件。

于 2015-03-14T14:36:48.023 回答