1

我想显示以下对象的 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 {}))

所以最后一个问题是:如何创建游标。

4

1 回答 1

1

(defn render-to-str "Equivalent to React.renderComponentToString" [c] (js/React.renderComponentToString c))

尝试使用组件作为参数调用函数。

于 2014-05-02T12:38:08.383 回答