Как вызвать om.dom/render-to-str в Emacs nrepl?

Я хотел бы отобразить вывод 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 все, что я получаю, равно нулю. И вызов 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, решена. Проблема заключалась в том, что я подключился не к реальному аналогу браузера, а к безголовому аналогу. Поэтому 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 {}))

Итак, последний вопрос: как мне создать курсор.


person rogergl    schedule 02.05.2014    source источник
comment
Я, вероятно, слишком поздно, чтобы быть полезным, но вы пробовали deref-инг a-cursor как @a-cursor? (dom/render-to-str (om.core/build search-input @a-cursor {}))   -  person agent-j    schedule 13.07.2014


Ответы (1)


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

Попробуйте вызвать функцию с компонентом в качестве аргумента.

person Joaquin    schedule 02.05.2014
comment
Проблема была не в этом. Я не подключался к реальному браузеру, а только к безголовому репо. - person rogergl; 02.05.2014