4

使用 Om,似乎将应用程序状态的相关部分传递给子组件实际上与不传递任何应用程序状态但使用引用游标相同。引用游标将应用程序状态的各个部分沿链向下传递的用例是什么?

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

有人可以澄清我何时想在组件内使用 ref 光标,而不是简单地将应用程序状态的一部分传递给该组件吗?

4

2 回答 2

1

I used it because when you update it, all of the observers get called.

于 2015-01-25T21:14:14.373 回答
1

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

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

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

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

于 2015-04-30T20:32:11.260 回答