gpt4 book ai didi

clojurescript - OM 组件与普通函数

转载 作者:行者123 更新时间:2023-12-03 07:28:46 25 4
gpt4 key购买 nike

我正在经历这个OM tutorial但我不清楚何时使用 OM 组件与普通函数(尤其是 om/component 宏)。

教程写道:

The first argument is a function that takes the application state data and the backing React component, here called owner. This function must return an Om component - i.e. a model of the om/IRender interface, like om.core/component macro generates


; here the function (fn [app owner]) indeed returns an OM component
(om/root
(fn [app owner]
(om/component (dom/h2 nil (:text app))))
app-state
{:target (. js/document (getElementById "app"))})

在下一节中,我们将找到以下列表渲染循环的示例:
 ; this one does not return an om component (or does it?). it returns a virtual dom
(om/root
(fn [app owner]
(apply dom/ul nil
(map (fn [text] (dom/li nil text)) (:list app))))
app-state
{:target (. js/document (getElementById "app0"))})

在这里,我们基本上只是直接返回一个(虚拟)dom,而不是包装在 OM 组件中,所以问题是:为什么 om/component 宏存在?该宏只是帮助我们具体化 IRender 函数,但似乎我们也可以为此使用普通函数。我会具体化具有生命周期状态的 OM 组件(或需要所有者调用 get-props),但对于只需要创建虚拟 dom 的组件,我宁愿使用简单的功能(所以我不需要 build/build-创建我的虚拟dom的所有功能)。我在这里想念什么?为什么宏仍然有用(我没有看到)。

最佳答案

上周我也有同样的问题,我翻遍了 Om 源代码来找出答案。

我找不到使用 om/component 之间的任何功能差异宏而不是。 但也许这些信息可以对更了解 React 的人有所启发。

任何功能f传递给 om/root (以及随后的 om/build )被放置在容器 Om 组件内。这个 Om 组件只是一个虚拟的 React 组件,它将所有生命周期事件转发到 f 的结果。如果它实现了 Om 的生命周期协议(protocol)(即当它是一个 reify 对象时)。

如果 f 的结果不是实现这些协议(protocol)的 reify 对象,它被假定为一个 React 组件,它被用作 render 的返回值生命周期函数。

(相关:Om's render function here)

关于clojurescript - OM 组件与普通函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com