在变化中,为什么需要Store?

时间:2015-02-09 20:11:52

标签: reactjs reactjs-flux

根据Flux Architecture View使用Action调用Dispatcher来更新Store,而View则调用Store更改事件。

我的问题是:为什么我们需要商店?

为了列出所有用户,我的Component将调用ListAllUsersAction,它将依次调用我的API并使用API​​调用的结果更新Store。然后,Store会发出View正在侦听的更改事件。但商店也存储了结果。为什么?为什么需要这个中间层?我不会直接调用商店,所以这个缓存层对我来说没有任何意义,并且当我生成更多加载更多数据的事件时,最终我的所有商店都将拥有我应用程序的所有状态,因为flux体系结构没有说清理商店

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

Flux的目标是保持数据流易于理解,即使应用程序变得庞大而复杂,以便可以快速提升新人的速度,通过检查源代码了解正在发生的事情,并确信他们可以做出改变而不会破坏事物。模块化和关注点分离是其中很重要的一部分。商店是一种保持数据模型独立于视图层细节的方法,并为应用程序状态建立单一的事实来源。您可以查看任何商店的代码,看看它包含哪些数据,它响应的操作,它对其他商店中的数据有哪些依赖关系。这是开发人员的组织问题,代价是代码稍微不那么紧凑。

  

为了列出所有用户,我的Component将调用ListAllUsersAction   这将反过来调用我的API,并将使用更新商店   API调用的结果。

由于Actions的功能主要是为商店提供更新的数据,你也可以先调用API,然后只创建一个Action来处理结果。

  

因为我生成了更多加载更多数据的事件,最终我的所有数据   商店将拥有我的应用程序的所有状态,因为flux   建筑没有说清理商店。

保持应用程序的当前状态是商店的预期功能。如果用户操作或API调用导致数据发生更改,则Actions会通知商店和商店负责相应地更新数据(甚至可能重置为null)。没有任何其他类型的清洁,因为商店“拥有所有的状态”正是他们应该做的。

答案 1 :(得分:1)

商店负责应用程序状态和逻辑,例如,假设您通过ListAllUsersAction获取所有用户,从API获取数组

var users = [{firstName: 'LIMELIGHTS'}, {firstName: 'SKWEE357'}];

现在,用户名显然是大写的,因为您的API决定这是传递数据的方式。

这只是不会这样做你想修复它。 使用React或只使用Action你会把这段代码放在哪里,哪里有意义? 在您看来,您的调度员还是您的行动?不,你绝对不希望用这种逻辑混乱你的React组件。 在Dispatcher或Action中执行此数据操作也没有意义,它们毕竟只是通知器应该发生的事情。