对于 Reflux,一个资源有 2 个商店还是 1 个商店? (自行车/CurrentBike 与自行车)

Posted

技术标签:

【中文标题】对于 Reflux,一个资源有 2 个商店还是 1 个商店? (自行车/CurrentBike 与自行车)【英文标题】:With Reflux, 2 stores or 1 store for a resource? (Bikes/CurrentBike vs Bikes) 【发布时间】:2015-06-26 05:06:10 【问题描述】:

我仍在尝试了解前端状态。是否有为资源设置商店的通用最佳实践?例如,我的 web api 有:

GET /bikes
GET /bikes/:id

我从一个 BikeStore 和 bikes: [] 开始。现在我正在研究 ShowBike 组件,不确定是否应该使用 BikeStore(不完全确定如何)或为单个项目创建第二个商店。

【问题讨论】:

【参考方案1】:

Flux 中的存储概念是对客户端如何访问数据的相当简单的抽象。不同类型的数据应使用单独的存储。在您的情况下,资源是相同的,没有任何充分的理由为自行车保留单独的商店。更重要的是:存储单品不是预期用途,应避免使用。

来自通量docs:

Stores 包含应用程序状态和逻辑。它们的角色有点类似于传统 MVC 中的模型,但它们管理许多对象的状态——它们不像 ORM 模型那样代表单个数据记录。它们也不与 Backbone 的系列相同。存储不仅仅是管理 ORM 样式对象的集合,还管理应用程序中特定域的应用程序状态。

【讨论】:

但是商店不是和它的视图有直接的对应关系吗?我想在上面的/bikes/bikes/:id 有不同的视图,每个都有不同的状态,一个自行车的集合和一个自行车,你如何在一个商店中表示这个? 在 Flux 模式中商店和视图之间没有一对一的关系。视图可以从各种存储中获取数据。商店将通知所有订阅视图的任何数据更改,视图将使用新的新数据调用自身。 您不必在商店之间建立一对一的关系。在你的情况下,我只会保留一家商店,没有什么能阻止你在商店里找一个吸气剂来把你想看的自行车还给你。像“getBikeById”这样的东西。您仍然需要一些逻辑来刷新您的自行车列表,但您会将逻辑保留在一个地方。

以上是关于对于 Reflux,一个资源有 2 个商店还是 1 个商店? (自行车/CurrentBike 与自行车)的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Reflux 的商店中使用 AJAX 获取初始状态

按需初始化部分 Redux 存储

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

使用 mocha 测试回流商店的状态变化

如何从 Reactjs+Reflux 应用程序中的组件正确初始化 Store?

Reflux之action