2016-06-20 25 views
1

正如我刚开始完全明白的那样,om.core/buildom.next的工厂函数返回引用组件函数/类的React元素对象,并返回the actual component is only instantiated later by React's reconciler。即,(om.core/build some-component data)实际上不会立即拨打some-component应该直接调用Om中的“组件”函数吗?

但是,我们经常将简单的“无状态”组件表示为仅使用道具并返回React元素的函数。在(纯粹的)React世界中,您可以使用其中一个功能,如组件类,如React.createElement(AStatelessComponent, {some: "props"}),或者更方便地在JSX中使用<AStatelessComponent some="props" />。那些也会返回一个引用AStatelessComponent的React元素,直到后期才会实际调用它。但是在Om中,当我们有一个这样的简单组件(并且“我们”指的是我和我的团队,至少),我们直接调用这个函数。因此,

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

这里,a-stateless-component立即调用,而不管它返回被直接插入在div,而不是由阵营调解器以后被取代。

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

回答

0

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

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

  1. 如果你打电话React.createElement你会得到一个“跟踪”例如在阵营的调解
  2. ,如果你不这样做,你得到内联,但无状态组件现在无法与React的渲染树中的父级进行区分。

编辑:我只是意识到,om.next/factory足够宽容,它允许你实例化你正在谈论的无状态组件。因此,您可以通过直接拨打道具功能js/React.createElement或使用与参数相同的功能呼叫om.next/factory来实现您想要的功能。

下面是一个工作示例。以下代码:

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

导致下列组分(在阵营的devtools):

stateless component

相关问题