【发布时间】:2016-06-25 18:01:15
【问题描述】:
我对 Flux 等 Web 应用程序架构有疑问。请注意,我没有使用 React.js,这个问题纯粹是关于架构的。
如果我正确理解 Flux 中的概念,Store 会通知组件有关更改。然后组件应该从 Store 中获取所有数据。当我想确切地知道数据发生了什么变化时会发生什么?当使用 ReactJS 时,可以将整个数据提供给 React,然后使用精心设计的 diff 和虚拟 DOM 算法来应用更改。但是如果没有 React 并且有大量数据怎么办?
现实生活中的例子
新数据每 1-2 秒通过 WebSockets 传入。数据被添加到 Store,但其中一个组件需要明确知道发生了什么变化(想象一下新数据需要以某种动画形式出现在视图中)。有很多数据,遍历整个数组并比较每个元素不是一种选择。此外,直觉上感觉不正确,因为应用程序的某些部分确切地知道它发生了什么变化,那么为什么视图不能?
我一直在寻找解决方案,并找到了三种建议的方法:
- 应用商店会准确告知更改的内容(违反 Flux 规则)
- Store 保留最后的更改并提供公共方法
getLastChanges() - 附加存储,仅保留最后更改的数据。
从架构上来说,这里的正确解决方案是什么?
【问题讨论】:
-
听起来 EventEmitters 更适合你的项目。由于套接字本身就是一个,也许只是给套接字两个处理程序?一个按原样,一个直接到爱管闲事的代码。为什么要纠缠其他不关心的事情?在低级别分离您的关注点。不是所有的东西都是钉子,因为你有一把花哨的锤子。常规-@ss 编程仍然有效,而且通常更好。
-
确实有道理! :) 组件获取实时数据,而 Store 一直是事实的来源,因为它始终拥有所有数据。
-
如果你不使用 React,我会迷失关于组件的部分,但如果你必须 dispatch() 每个套接字事件,那么 #2 是最不麻烦的,或者你可以用
lastChanged属性,以便下游消费者可以访问它以通知shouldComponentUpdate()-like 选择器。 -
组件不是为 React 保留的词,有 Web 组件、AngularJS 中的组件,或者通常是解耦、自包含的应用程序中的组件。谢谢你的建议:)
标签: javascript architecture redux flux refluxjs