我想显示以下对象的 html 输出:
(defn search-input [_ owner]
(reify
om/IInitState
(init-state [_]
{:text nil})
om/IRenderState
(render-state [this state]
(dom/input
#js {:type "text"
:value (:text state)
:className "form-control"
:onChange (fn [event] (handle-change event owner state))}))))
om.dom 中有一个 render-to-str 方法。但是如果我输入
om.dom/render-to-str
在 ClojureScript repl 中,我得到的只是零。调用 om.dom/render-to-str 会给出对应的错误消息。
TypeError: 'undefined' is not an object (evaluating 'om.dom.render_to_str.call')
奇怪的是:repl 中的代码完成给了我 render-to-str 调用。
好的,解决了 om.dom/render-to-str 返回 nil 的问题。问题是我没有连接到真正的浏览器 repl 而是无头 repl。因此没有加载 index.html,因此没有加载 react.js。
但现在打电话
(dom/render-to-str (search-input nil {}))
返回
"Error evaluating:" (dom/render-to-str (search-input nil {})) :as "om.dom.render_to_str.call(null,om_oanda.core.search_input.call(null,null,cljs.core.PersistentArrayMap.EMPTY));\n"
#<Error: Invariant Violation: renderComponentToString(): You must pass a valid ReactComponent.>
Error: Invariant Violation: renderComponentToString(): You must pass a valid ReactComponent.
经过更多测试后,我认为我必须像这样更改调用:
(dom/render-to-str (om.core/build search-input a-cursor {}))
所以最后一个问题是:如何创建游标。