是否可以编写一个不呈现任何内容的组件,例如,如果其游标数据为空?
我无法做到
(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,这会导致错误消息
未捕获错误:不变违规:ReactCompositeComponent.render(): 必须返回有效的ReactComponent。您可能已经返回null, undefined,数组或其他一些无效对象。
我通过渲染一个空的跨度,但听起来很笨拙。 我是否必须重构我的代码并进行测试" out"这个组件?
答案 0 :(得分:6)
我对你不能这样做的理解是因为React需要跟踪DOM中的组件,并通过向节点添加react-id属性来实现。 如果你渲染"没有",那么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))))))
答案 1 :(得分:1)