次のオブジェクトの 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 {}))
最後の質問は次のとおりです。カーソルを作成するにはどうすればよいですか。