在 Om 中传递 App Atom 与 Ref-Cursors

Passing App Atom vs Ref-Cursors in Om

使用 Om,似乎将应用状态的相关部分传递给子组件实际上与不传递任何应用状态但使用 ref-cursors 是一样的。 ref-cursors 在链下传递应用程序状态片段的用例是什么?

我已经通读了 Om github 存储库中的所有三个教程和概念概述,但我真的找不到这个问题的答案。似乎一个人可以使用其中一个或另一个来完成同样的事情(一个人要么用 (defn blah [_ owner] ...) 定义一个组件并使用 ref 游标,要么用 (defn blah [relevent-state owner] ...)

定义一个组件

有人可以说明我什么时候想在组件内使用引用游标,而不是简单地将部分应用程序状态传递到该组件吗?

我使用它是因为当你更新它时,所有的观察者都会被调用。

这个问题很老了,但我会试一试。

我认为 ref-cursors 的主要用例是促进模块化和全局应用程序状态与组件的解耦。它将组件的范围限制为它们所依赖的数据,而不是其他任何东西。

通常,如您所说,您会通过 props 将应用程序状态和任何更改回调传递到组件树下。结果是组件层次结构与应用程序状态的 "shape" 紧密耦合。组件层次结构必须与状态 1:1 匹配,否则许多组件将收到只有少数子组件依赖的大量数据和回调,它们本身可能永远不会实际使用 - 即您可能会发现自己传递给全局状态的部分沿着组件链向下移动,以便更下方的组件可以访问它。这些组件被用作向下传递状态的通道,这并不理想,因为它会将它们暴露给它们不了解的应用程序状态。您 运行 耦合和失去模块化的风险。

对于游标,组件依赖性由每个组件在安装时明确指定。游标是进入应用程序状态的黑框——组件本身永远不必知道它在应用程序中的位置。您可以完全灵活地从应用程序状态中的任何位置声明组件的依赖关系,而不必担心传递的所有瞬态数据。您可以获得单向数据流,而无需将更新回调向下传递到任意深的层次结构。最终结果是出色的组件划分和模块化。作为奖励,您现在可以单点进入应用程序状态,您可以观察变化!