Простая форма Clojurescript

Я работаю с Reagent и CLJS, знаком с React и Clojure, в меньшей степени с CLJS. Я хотел бы сделать простую форму, но это не очевидно для меня в CLJS.

(defn form []
  [:div
   [:input {:type "text" :name "first-name" :id "first-name"}]
    [:button  {:on-click (fn [e] (test-func "hello"))}
  "Click me!"]
])

Я хочу получить значение этого ввода и передать его функции при нажатии кнопки. Как мне получить значение этого входа в мой on-click функционировать?

2 ответа

Решение

Идиоматический и технически правильный способ - избегать сохранения любого состояния в DOM и прямого доступа к нему. Вы не должны полагаться на значение ввода. Сохраняйте состояние как атом Реагента. Тогда вы можете сделать что-нибудь с этим.

(def first-name (r/atom ""))

(defn form []
  [:div
   [:input {:type "text"
            :value @first-name
            :on-change #(reset! first-name (.-value (.-target %)))
            }]
   [:button  {:on-click #(test-func @first-name)} "Click me!"]])

Вы можете получить значение элемента следующим образом: (.-value (.getElementById js/document "first-name"))

(defn form []
  [:div
   [:input {:type "text" :name "first-name" :id "first-name"}]
    [:button  {:on-click (fn [e] (test-func (.-value (.getElementById js/document "first-name"))))}
  "Click me!"]
])

Если есть лучший ответ, пожалуйста, поделитесь.:)

Другие вопросы по тегам