首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Om中的“组件”函数应该直接调用吗?

Om中的“组件”函数应该直接调用吗?
EN

Stack Overflow用户
提问于 2016-06-20 15:42:23
回答 1查看 87关注 0票数 1

正如我刚刚开始完全理解的那样,om.core/buildom.next的工厂函数返回React元素对象,这些元素对象引用组件函数/类和实际组件只在稍后由React的协调器实例化,也就是说,(om.core/build some-component data)实际上不会立即调用some-component

但是,我们通常将简单的“无状态”组件表示为只使用道具并返回一个React元素的函数。在(纯粹的) React世界中,您可以像使用组件类一样使用这些函数之一,如React.createElement(AStatelessComponent, {some: "props"}),或者更方便地使用JSX作为<AStatelessComponent some="props" />。这些元素也返回引用AStatelessComponent的React元素,该元素直到稍后才会被实际调用。

但是在Om中,当我们有这样一个简单的组件时(我说的“我们”至少指我和我的团队),我们直接调用这个函数。因此,

代码语言:javascript
运行
复制
(render [this]
  (om/div {}
      (a-stateless-component {:some "data"})))

在这里,将立即调用a-stateless-component,并且它返回的任何内容都直接插入到div中,而不是稍后由React协调器替换。

在Om中是否有React.createElement的首选方法?还是它宁愿直接调用这样的函数,即使它跳过在呈现树中创建组件实例?

EN

回答 1

Stack Overflow用户

发布于 2016-09-14 12:24:30

在Om中,如果要实例化无状态组件,则需要直接调用js/React.createElement

为什么要这样做取决于:

  1. 如果调用React.createElement,则在React的协调器中得到一个“跟踪”实例
  2. 如果不这样做,则会得到内联,但在React的呈现树中,无状态组件现在无法与其父组件区分开来。

编辑:我刚刚意识到om.next/factory是允许的,它允许您实例化正在讨论的无状态组件。因此,您可以通过在道具函数上直接调用js/React.createElement,或者使用与参数相同的函数调用om.next/factory来实现您想要的结果。

下面是一个有用的例子。以下代码:

代码语言:javascript
运行
复制
((om/factory #(dom/div nil "Hello, World")))

在以下组件中的结果(在React的devtools中):

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

https://stackoverflow.com/questions/37926569

复制
相关文章

相似问题

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