Я работаю с 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?





Вы можете получить значение элемента следующим образом: (.-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!"]
])
Если есть лучший ответ, поделитесь, пожалуйста. :)
Идиоматический и технически правильный способ - избегать сохранения какого-либо состояния в 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!"]])