gpt4 book ai didi

clojurescript - om 组件应该返回什么以不渲染任何内容?

转载 作者:行者123 更新时间:2023-12-04 23:50:08 25 4
gpt4 key购买 nike

是否可以编写一个不渲染任何内容的组件,例如,如果其游标数据为空?

我不能做

(defn count-or-nothing [list-cursor owner]
(reify
om/IRender
(render [_]
(if (not (empty? list-cursor))
(dom/div nil "You have some elements !")))))

if 子句返回 nil,这会导致错误消息

Uncaught Error: Invariant Violation: ReactCompositeComponent.render(): A valid ReactComponent must be returned. You may have returned null, undefined, an array, or some other invalid object.



我通过渲染一个空跨度,但这听起来很笨拙。
我是否必须重构我的代码并让测试“脱离”这个组件?

最佳答案

我对为什么不能这样做的理解是因为 React 需要跟踪 DOM 中的组件,并通过向节点添加 react-id 属性来做到这一点。
如果你渲染“nothing”,那么 React 不知道如何将它挂载到 DOM 中(它实际上被卸载了)。由于您不能安装未安装的组件,因此不允许这样做。

解决方案是让非空状态成为它自己的组件,然后让 PARENT 有条件地构建该组件。这样,如果您不想渲染任何内容,它会卸载组件并且.. 不渲染任何内容。

(defn something-interesting [list-cursor owner]
(reify
om/IRender
(render [_]
(dom/div nil "You have some elements !"))))

(defn count-or-nothing [list-cursor owner]
(reify
om/IRender
(render [_]
(dom/div nil
; Other UI stuff here maybe...
(when-not (empty? list-cursor)
(om/build something-interesting list-cursor))))))

关于clojurescript - om 组件应该返回什么以不渲染任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555749/

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