rogergl
rogergl

Reputation: 3771

How to call om.dom/render-to-str in Emacs nrepl?

I would like to display the html output of the following object:

(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))}))))

There is a render-to-str method in om.dom. But if I type

om.dom/render-to-str 

in the ClojureScript repl all I get is nil. And calling om.dom/render-to-str gives the correspondign error message.

TypeError: 'undefined' is not an object (evaluating 'om.dom.render_to_str.call')

The strange thing: Code completion in the repl gives me the render-to-str call.


Ok the problem with om.dom/render-to-str returning nil is solved. The problem was that I didn't connect to a real browser repl but a headless repl. Therefore no index.html was loaded and therefore not react.js was loaded.

But now calling

(dom/render-to-str (search-input nil {}))

returns

"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.

After some more tests I think I have to change the call like this:

(dom/render-to-str (om.core/build search-input a-cursor {}))

So the last question is: How do I create a cursor.

Upvotes: 1

Views: 263

Answers (1)

Joaquin
Joaquin

Reputation: 2744

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

Try calling the function with the component as an argument.

Upvotes: 1

Related Questions