正如我刚刚开始完全理解的那样,om.core/build和om.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中,当我们有这样一个简单的组件时(我说的“我们”至少指我和我的团队),我们直接调用这个函数。因此,
(render [this]
(om/div {}
(a-stateless-component {:some "data"})))在这里,将立即调用a-stateless-component,并且它返回的任何内容都直接插入到div中,而不是稍后由React协调器替换。
在Om中是否有React.createElement的首选方法?还是它宁愿直接调用这样的函数,即使它跳过在呈现树中创建组件实例?
发布于 2016-09-14 12:24:30
在Om中,如果要实例化无状态组件,则需要直接调用js/React.createElement。
为什么要这样做取决于:
React.createElement,则在React的协调器中得到一个“跟踪”实例编辑:我刚刚意识到om.next/factory是允许的,它允许您实例化正在讨论的无状态组件。因此,您可以通过在道具函数上直接调用js/React.createElement,或者使用与参数相同的函数调用om.next/factory来实现您想要的结果。
下面是一个有用的例子。以下代码:
((om/factory #(dom/div nil "Hello, World")))在以下组件中的结果(在React的devtools中):

https://stackoverflow.com/questions/37926569
复制相似问题