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 では、取得できるのは nil だけです。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 に答える