我正在阅读这个OM教程但是我不清楚何时使用OM组件与普通函数(特别是om /组件宏).
该教程写道:
第一个参数是一个函数,它接受应用程序状态数据和后备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"))})
Run Code Online (Sandbox Code Playgroud)
在下一节中,我们找到以下列表的呈现循环示例:
; 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"))})
Run Code Online (Sandbox Code Playgroud)
在这里,我们基本上只是直接返回一个(虚拟)dom,而不是包含在OM组件中,所以问题是:为什么om/component宏存在?宏只是帮助我们验证IRender功能,但看起来我们也可以只使用普通函数.我会介绍具有生命周期状态的OM组件(或者需要所有者调用get-props)但是对于只需要创建虚拟dom的组件我宁愿选择简单的函数(所以我不需要构建/构建 - 创建我的虚拟dom的所有功能).我在这里错过了什么?为什么宏仍然有用(我没有看到它).
上周我有同样的问题,我挖掘了Om源代码以找出答案.
我发现使用om/component宏之间没有任何功能差异. 但也许这些信息可以揭示更多了解React的人.
f传递给om/root(并随后om/build)的任何函数都放在容器Om组件内.这个Om组件只是一个虚拟的React组件,f如果它实现了Om的生命周期协议(即它是一个reify对象),它会将所有生命周期事件转发给结果.
如果结果f不是实现这些协议的reify对象,则假定它是React组件,并将其用作render生命周期函数返回的值.
(相关:Om的渲染功能在这里)
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |