我正在学习OM教程,但我不清楚何时使用OM组件和普通函数(特别是om/component宏)。
教程写道:
第一个参数是一个函数,它接受应用程序状态数据和支持React组件的owner。此函数必须返回一个Om组件——即om/IRender接口的模型,就像om.core/component宏生成的那样。
在下一节中,我们将找到以下关于列表渲染循环的示例:
在这里,我们只是直接返回一个(虚拟)dom,而不是包装在OM组件中,所以问题是:为什么om/component宏存在?该宏只是帮助我们重新定义IRender函数,但似乎我们也可以使用普通函数来实现。我会重新定义具有生命周期状态的OM组件(或需要所有者调用get-props的组件),但对于只需要创建虚拟dom的组件,我更愿意选择简单的函数(因此我不需要build/build-all函数来创建我的虚拟dom)。我在这里漏掉了什么?为什么宏仍然有用(而我没有看到它)?
教程写道:
第一个参数是一个函数,它接受应用程序状态数据和支持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的组件,我更愿意选择简单的函数(因此我不需要build/build-all函数来创建我的虚拟dom)。我在这里漏掉了什么?为什么宏仍然有用(而我没有看到它)?