我正在使用re-frame
框架。
在下面的代码中,当用户输入以下内容时,我无法更新输入值:
(defn measurement-input [{:keys [amount unit path]}]
(let [amt (atom amount)]
(fn []
[:div
[:input {:type "text"
:value @amt
:on-change #(reset! amt (-> % .-target .-value))}]
[:input {:type "button"
:value unit}]])))
在我将:value
更改为:defaultValue
之前,输入值不会更改。我很确定上面的例子与Reagent
的输入示例非常吻合。
在下面的代码中,我试图在用户更新输入值时做两件事。我尝试reset!
输入值以及dispatch
事件处理程序的值。我已经在do
电话中完成了这两个函数调用。
另外值得注意的是,在下面的代码中,用户可以更新文本字段中的值。
(defn measurement-input [{:keys [amount unit path]}]
(let [amt (atom amount)]
(fn []
[:div
[:input {:type "text"
:value @amt
:on-change (do #(reset! amt (-> % .-target .-value))
(re-frame/dispatch [:update-value @amt]))}]
[:input {:type "button"
:value unit}]])))
在javascript控制台中,我收到以下错误:
Uncaught TypeError: Cannot read property 'call' of null template.cljs?rel=1435381284083:101
任何人都欢迎任何帮助!
答案 0 :(得分:4)
Daniel Kersten在ClojureScript Google网上论坛上向我解释了为什么代码片段无效。该帖子的链接是here。
第一个代码段
reagent
会使用它自己的实现覆盖clojure
的原子。 re-frame
views.cljs
默认情况下不会引用此信息。在您引用reagent
的{{1}}版本后,事情就会奏效。
在atom
文件的顶部,更改此内容:
views.cljs
为:
(ns performance-tracker.views
(:require [re-frame.core :refer [subscribe dispatch]]))
第二段代码
(ns performance-tracker.views
(:require [reagent.core :as reagent :refer [atom]]
[re-frame.core :refer [subscribe dispatch]]))
需要一个功能。我正在:on-change
街区过来。只需将do
块包装在函数内即可修复错误。请参阅下面的正确代码:
do