2016-11-02 3 views
1

Я следую инструкциям REAGENT SPA по адресу http://yogthos.net/posts/2014-07-15-Building-Single-Page-Apps-with-Reagent.html.Текстовое поле с реагентом Clojurescript не отображает типизированный контент при добавлении: on-change handler

код у меня до сих пор:

(def state (atom {:doc {} :saved? false})) 

(defn set-value! [id value] 
    (swap! state assoc :saved? false) 
    (swap! state assoc-in [:doc id] value)) 

(defn get-value [id] 
    (get-in @state [:doc id])) 

(defn row [label body] 
    [:div.row 
    [:div.col-md-2 [:span label]] 
    [:div.col-md-3 body]]) 

(defn text-input [id label] 
    [row label 
    [:input {:type "text" 
      :class "form-control" 
      :value (get-value id) 
      :on-change #(set-value! id (-> % .-target .-value))}]]) 

(defn home-pg [] 
    [:div.container 
    [:div.page-header [:h1 "Reagent Form"]] 
    [text-input :first-name "First name"]]) 

Теперь, когда я запускаю это и введите текст в текстовом поле, ничего не появляется. Когда я удаляю обработчик: on-change, все, что я набираю, появляется. Может кто-нибудь помочь мне понять, что происходит?

Большое спасибо заранее!

ответ

2

Я нашел ошибку. В первой строке используется обычный атом Clojure. Вместо этого он должен использовать атом реагента. Изменение этой линии на

(def state (r/atom {:doc { } :saved? false})) 

устраняет проблему.

Смежные вопросы