【发布时间】:2016-12-21 20:38:06
【问题描述】:
我正在尝试在我的朗姆酒应用中使用来自 React Bootstrap 的 React 组件。
在我的宏命名空间中,我有一些 found on the rum gitter 的代码:
(defn ->kebab [s]
(str/join "-" (map str/lower-case (re-seq #"\w[a-z]+" s))))
(defn gen-wrapper [component]
`(defmacro ~(symbol (->kebab (str component))) [& args#]
(let [[opts# & [children#]] (if (-> args# first map?)
[(first args#) (rest args#)]
[nil args#])]
`(js/React.createElement
~(symbol "js" (str "window.ReactBootstrap." (name '~component)))
(cljs.core/clj->js ~opts#)
~@children#))))
(def components '[Button
])
(defmacro gen-wrappers []
`(do
~@(clojure.core/map gen-wrapper components)))
然后在我的 devcard 命名空间中,我有:
(pm/gen-wrappers)
(rum/defc foo []
[:div (button nil "bggg")])
(defcard foo "" (foo))
错误是:
react.inc.js:18342 未捕获错误:不变违规:对象是 作为 React 子级无效(找到:js/React.createElement)。如果你 意味着渲染一组孩子,使用数组代替或包装 使用 React 附加组件中的 createFragment(object) 的对象。查看
foo的渲染方法。
【问题讨论】:
标签: reactjs clojurescript