由于我只是开始完全理解,om.core/build
和om.next
的工厂函数返回React元素对象,它引用组件函数/类,{{3 }}。也就是说,(om.core/build some-component data)
实际上并没有立即调用some-component
。
然而,我们经常代表简单的,#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
的首选方法吗?或者它是否首选直接调用这样的函数,即使它跳过在渲染树中创建组件实例?
答案 0 :(得分:0)
在Om中,如果要实例化无状态组件,则需要直接调用js/React.createElement
。
为什么你想这样做取决于:
React.createElement
,您会在React的协调程序中获得“跟踪”实例编辑:我刚刚意识到om.next/factory
很宽松,它允许你实例化你正在谈论的无状态组件。所以你可以直接在props的函数上调用js/React.createElement
,或者用与参数相同的函数调用om.next/factory
来实现你想要的。
这是一个有效的例子。以下代码:
((om/factory #(dom/div nil "Hello, World")))
产生以下组件(在React的devtools中):