我正在阅读这个OM 教程,但我不清楚何时使用 OM 组件与普通函数(特别是 om/component 宏)。
教程写道:
第一个参数是一个接受应用程序状态数据和支持 React 组件的函数,这里称为 owner。此函数必须返回一个 Om 组件 - 即 om/IRender 接口的模型,如 om.core/component 宏生成
; here the function (fn [app owner]) indeed returns an OM component
(om/root
(fn [app owner]
(om/component (dom/h2 nil (:text app))))
app-state
{:target (. js/document (getElementById "app"))})
在下一节中,我们将找到以下列表渲染循环的示例:
; this one does not return an om component (or does it?). it returns a virtual dom
(om/root
(fn [app owner]
(apply dom/ul nil
(map (fn [text] (dom/li nil text)) (:list app))))
app-state
{:target (. js/document (getElementById "app0"))})
在这里,我们基本上只是直接返回一个(虚拟)dom,而不是包装在 OM 组件中,所以问题是:为什么 om/component 宏存在?该宏只是帮助我们具体化 IRender 函数,但似乎我们也可以为此使用普通函数。我会具体化具有生命周期状态的 OM 组件(或需要所有者调用 get-props),但对于只需要创建虚拟 dom 的组件,我宁愿使用简单的功能(所以我不需要构建/构建-创建我的虚拟dom的所有功能)。我在这里想念什么?为什么宏仍然有用(我没有看到)。