Поскольку я только начинаю полностью понимать, заводские функции om.core/build
и om.next
возвращают объекты элементов реакции, которые относятся к функциям/классам компонентов и 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" />
. Они также возвращают элемент React, который ссылается на AStatelessComponent
, который на самом деле не будет вызван до конца.
Но в Om, когда у нас есть простой компонент, подобный этому (и, по крайней мере, мы «я», я имею в виду меня и свою команду), мы вызываем функцию напрямую. Таким образом,
(render [this]
(om/div {}
(a-stateless-component {:some "data"})))
Здесь a-stateless-component
это вызывается сразу, и все, что она возвращает вставляется непосредственно в DIV, а не замещено позже в React выверке.
Есть ли предпочтительный способ для React.createElement
в Ом? Или предпочтительнее просто вызывать такие функции напрямую, даже если он пропускает создание экземпляра компонента в дереве рендеринга?