我正在尝试使用Reagent/React构建一个Hello World应用程序。我使用:value
/:on-change
组合将输入与原子绑定。然而,当我输入时,输入框保持为空:
(defn new-user []
; Atom declared in an inner `let`.
(let [v (atom "")]
[:div
[:input {:type "text"
:value @v
:on-change (fn [evt]
(reset! v (-> evt .-target .-value)))
}]]))
(defn app [state]
[:div
[:p "State" (pr-str @app-state)]
[new-user]])
(r/render-component [app app-state]
(.-body js/document))
如果我将原子移出let
,它就可以工作:
; Atom is now top-level.
(defonce v (atom ""))
(defn new-user []
[:div
[:input {:type "text"
:value @v
:on-change (fn [evt]
(reset! v (-> evt .-target .-value)))
}]])
是因为每次 React 重新渲染时都会重新声明 v
吗?如果是这样,我该如何重构代码,以便不必使用全局变量来保存 v
?
:value
改成:defaultValue
,这个解决方案才对我起作用。 - Kurt Mueller