通量商店改变其他商店

Posted

技术标签:

【中文标题】通量商店改变其他商店【英文标题】:Flux stores changing other stores 【发布时间】:2016-01-19 10:13:03 【问题描述】:

我正在使用 Flux 和 React 创建一个应用程序,这有点像游戏......这个应用程序有 3 个商店:

GameStore -> 包含游戏状态,比如完成,玩家赢了多少次,以及这些东西

CounterStore -> 是一个倒计时存储,每 1 秒自触发一次,计数器组件会自行更新。

BlockStore -> 这与游戏组件有关,这是一种用户可以交互的块。

所以,每当我点击一个块时,我都会触发一个动作并将它放到 BlockStore 中。 BlockStore 做了一些魔术并识别点击的块是否正确,如果正确,它会更新 GameStore(用户点击正确块的次数)并更新 CounterStore(这会增加用户的计时器)。

此外,每当 CounterStore 变为 0 时,它也会更改 GameStore 以设置用户丢失。

这感觉完全错误,我的商店它们以某种方式连接...每个操作都会更改几乎所有商店,但有些操作取决于商店结果,以更改其他商店(这令人困惑:S)。

我想知道我是否以正确的方式做这件事,也许我应该将所有东西都放在一个商店中(这将使其难以维护),或者删除一些商店并将一些东西视为组件状态直接(例如计数器)。

我迷路了。

【问题讨论】:

【参考方案1】:

从https://facebook.github.io/flux/docs/overview.html 提取:

Stores 包含应用程序状态和逻辑。他们的作用有点 类似于传统 MVC 中的模型,但它们管理 许多对象——它们不代表像 ORM 这样的单一数据记录 模型做。它们也不与 Backbone 的系列相同。多于 商店只需管理一组 ORM 样式的对象, 应用程序中特定域的应用程序状态

您的 GameStore 不应保存每个区块的信息。 BlockStore 应该保存块和与各个块有关的数据。由于您还有其他描述游戏整体状态的数据,因此我建议您拥有第二个专门用于保存该状态的存储(即,保存计数器、进行中/已完成、得分等的 StateStore)。

【讨论】:

感谢 Alex 的回答,实际上我的 GameStore 并没有保存每个区块的信息。它只保存与游戏相关的信息,比如游戏是否完成,或者用户赢了多少次等等。问题是我必须根据 BlockStore 解析的数据更改 GameStore ...如果我单击了正确的块,GameStore 也应该更改,以更新它的状态,即我在正确的块中单击了多少次 此外,BlockStore 也会更改 CounterStore... 如果我点击正确的块,我会增加计数器,否则我会减少它。我真的不知道这种应用程序是否适用于 Flux :/ @Mauriciosoares 可以从 BlockStore 发送操作以更新 CounterStore/GameStore 中的值。我仍然建议将 CounterStore 和 GameStore 合并到一个商店中。如果您决定将所有内容都放在一个存储中,我会将存储专用于所有数据,并将任何使数据变异的方法/函数抽象到单独的控制器中。

以上是关于通量商店改变其他商店的主要内容,如果未能解决你的问题,请参考以下文章

使用通量商店

通量商店 - 单元测试

在使用通量架构完成 ajax 请求后更新 reactjs 上下文

通量/反应:如何处理商店中过滤的 api 数据

为啥在通量应用程序架构中每个实体使用一个商店?

通量控制器视图未订阅商店中的事件更改