应该"组件" Om中的函数可以直接调用吗?

时间:2016-06-20 15:42:23

标签: reactjs om

由于我只是开始完全理解,om.core/buildom.next的工厂函数返回React元素对象,它引用组件函数/类,{{3 }}。也就是说,(om.core/build some-component data)实际上并没有立即调用some-component

然而,我们经常代表简单的,#34;无国籍的&#34;组件只是带有props并返回React元素的函数。在(纯)React世界中,您可以使用其中一个函数,如组件类,React.createElement(AStatelessComponent, {some: "props"}),或者更方便地在JSX中使用<AStatelessComponent some="props" />。那些也返回一个引用AStatelessComponent的React元素,它实际上被调用直到以后。

但是在Om中,当我们有一个像这样的简单组件时(至少#34;我们&#34;我的意思是我和我的团队,至少),我们直接调用该函数。因此,

(render [this]
  (om/div {}
      (a-stateless-component {:some "data"})))

这里,a-stateless-component 立即被调用,它返回的任何东西都直接插入到div中,而不是后来被React协调器替换。

Om中有React.createElement的首选方法吗?或者它是否首选直接调用这样的函数,即使它跳过在渲染树中创建组件实例?

1 个答案:

答案 0 :(得分:0)

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

为什么你想这样做取决于:

  1. 如果您致电React.createElement,您会在React的协调程序中获得“跟踪”实例
  2. 如果不这样做,则会进行内联,但现在无法将无状态组件与React的渲染树中的父组件区分开来。
  3. 编辑:我刚刚意识到om.next/factory很宽松,它允许你实例化你正在谈论的无状态组件。所以你可以直接在props的函数上调用js/React.createElement,或者用与参数相同的函数调用om.next/factory来实现你想要的。

    这是一个有效的例子。以下代码:

    ((om/factory #(dom/div nil "Hello, World")))
    

    产生以下组件(在React的devtools中):

    stateless component