首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OM组件与普通函数

OM组件与普通函数
EN

Stack Overflow用户
提问于 2014-06-28 11:39:15
回答 2查看 866关注 0票数 8

我正在学习这个OM教程,但是我不清楚什么时候应该使用OM组件和普通函数(特别是om/component宏)。

本教程写道:

第一个参数是一个函数,它接受应用程序状态数据和后台响应组件,这里称为owner。此函数必须返回Om组件,即om/IRender接口的模型,如om.core/component宏生成

代码语言:javascript
复制
; 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"))})

在下一节中,我们找到了列表的呈现循环的以下示例:

代码语言:javascript
复制
 ; 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"))})

在这里,我们基本上只是直接返回一个(虚拟)域,而不是封装在OM组件中,所以问题是:为什么om/component宏存在?这个宏只是帮助我们还原IRender函数,但是看起来我们也可以使用简单的函数。我会将具有生命周期状态的OM组件具体化(或者需要所有者调用get-props),但是对于只需要创建虚拟dom的组件,我更愿意使用简单的函数(所以我不需要构建/构建-所有函数来创建我的虚拟dom)。我在这里错过了什么?为什么这个宏仍然有用(我看不出来)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 00:10:50

上周我也有过同样的问题,我仔细研究了Om源代码来找出答案。

在使用om/component 宏和不使用宏之间,我找不到任何功能上的区别。,但也许这个信息可以为更了解反应的人提供一些线索。

传递给om/root (以及随后的om/build)的任何函数都放在容器Om组件中。这个Om组件只是一个虚拟的React组件,如果它实现Om的生命周期协议(也就是说,当它是一个reify对象时),它会将所有生命周期事件转发给f的结果。

如果f的结果不是实现这些协议的reify对象,则假定它是function组件,并用作render生命周期函数返回的值。

(相关:Om在这里的渲染功能)

票数 9
EN

Stack Overflow用户

发布于 2014-07-01 07:02:52

当您不需要传递状态时,om/component宏只是defn和reify组合的简写。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24466421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档