У меня есть компонент:
(defn inner-input [cljs_element activeEl title]
(let [form (atom title)]
(fn [cljs_element activeEl title]
[:input {:type "text"
:onChange #(reset! form (.. % -target -value))
:on-blur #(change-title cljs_element (.. % -target -value))
:style {:display (if (:active (:node cljs_element)) "block" "none")
:width (* (+ 1 (count @form)) 8)
:max-width 730
:min-width 170}
:value @form}])))
Он вложен в другой компонент:
(defn card-input [cljs_element activeEl]
(fn [cljs_element activeEl]
(let [title (:title (:node cljs_element))]
[:div
[inner-input cljs_element activeEl title]])))
Когда я ввожу данные на вход в компоненте inner-input, мне нужно обновить форму локального состояния. И когда внешний компонент card-input обновляется, я хочу сбросить свою форму на новую опору title из аргумента. Как я могу этого добиться?
Я попытался поставить (reset! form title)
между let и fn в компоненте inner-input, но это не поможет
form
в функции рендеринга, он будет вызываться после каждого вызова рендеринга из внешнего компонента. Вам просто нужно добавить(reset! form title)
сразу после(fn [cljs_element activeEl title] ...
- person leetwinski   schedule 19.12.2017(reset! form title)
перепишет мое локальное состояние, измененное на: onChange. Мне нужно изменить атом формы на заголовок из аргументов только тогда, когда внешний компонент был обновлен - person Vyguzov Aleksandr   schedule 19.12.2017(reset! form title
) (внутри внутренней fn), вам также придется поместить let за пределы внешней fn и превратить ее в ratom. Например,(let [title (atom (:title (:node cljs_element)))] (fn [cljs_element activeEl] ...))
- person Erwin Rooijakkers   schedule 27.12.2017