【问题标题】:Flux: Should Stores inform components about what's changed?Flux:Stores 是否应该通知组件发生了哪些变化?
【发布时间】:2016-06-25 18:01:15
【问题描述】:

我对 Flux 等 Web 应用程序架构有疑问。请注意,我没有使用 React.js,这个问题纯粹是关于架构的。

如果我正确理解 Flux 中的概念,Store 会通知组件有关更改。然后组件应该从 Store 中获取所有数据。当我想确切地知道数据发生了什么变化时会发生什么?当使用 ReactJS 时,可以将整个数据提供给 React,然后使用精心设计的 diff 和虚拟 DOM 算法来应用更改。但是如果没有 React 并且有大量数据怎么办?

现实生活中的例子

新数据每 1-2 秒通过 WebSockets 传入。数据被添加到 Store,但其中一个组件需要明确知道发生了什么变化(想象一下新数据需要以某种动画形式出现在视图中)。有很多数据,遍历整个数组并比较每个元素不是一种选择。此外,直觉上感觉不正确,因为应用程序的某些部分确切地知道它发生了什么变化,那么为什么视图不能?

我一直在寻找解决方案,并找到了三种建议的方法:

  1. 应用商店会准确告知更改的内容(违反 Flux 规则)
  2. Store 保留最后的更改并提供公共方法getLastChanges()
  3. 附加存储,仅保留最后更改的数据。

从架构上来说,这里的正确解决方案是什么?

【问题讨论】:

  • 听起来 EventEmitters 更适合你的项目。由于套接字本身就是一个,也许只是给套接字两个处理程序?一个按原样,一个直接到爱管闲事的代码。为什么要纠缠其他不关心的事情?在低级别分离您的关注点。不是所有的东西都是钉子,因为你有一把花哨的锤子。常规-@ss 编程仍然有效,而且通常更好。
  • 确实有道理! :) 组件获取实时数据,而 Store 一直是事实的来源,因为它始终拥有所有数据。
  • 如果你不使用 React,我会迷失关于组件的部分,但如果你必须 dispatch() 每个套接字事件,那么 #2 是最不麻烦的,或者你可以用lastChanged 属性,以便下游消费者可以访问它以通知shouldComponentUpdate()-like 选择器。
  • 组件不是为 React 保留的词,有 Web 组件、AngularJS 中的组件,或者通常是解耦、自包含的应用程序中的组件。谢谢你的建议:)

标签: javascript architecture redux flux refluxjs


【解决方案1】:

但是如果没有 React 并且有大量数据怎么办?

在这种情况下,Flux 架构并不适用。为什么要使用它?

当视图(或任何订阅到商店的内容)可以仅基于对当前(有时是前一个)状态的了解有效地执行操作时,Flux 工作得很好。如果您的领域不是这种情况,请不要使用 Flux。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多