首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使试剂中的输入发生变化?

如何使试剂中的输入发生变化?
EN

Stack Overflow用户
提问于 2020-03-19 23:39:02
回答 1查看 497关注 0票数 0

我刚接触React、Clojure、ClojureScript和Reagent,所以我可能遗漏了一些简单的东西。

我正在修改此处的代码(https://reagent-project.github.io)和默认的hello-world ClojureScript页面,以获得一个简单的登录页面。但是,每当我在用户名和密码字段中键入内容时,什么都不会发生。为什么会这样呢?

代码语言:javascript
复制
(ns cljs_test.core
    (:require [reagent.core :as reagent :refer [atom]]))

(enable-console-print!)

;; define your app data so that it doesn't get over-written on reload

(defonce app-state (atom {:text "Hello world!"}))

; define Reagent component `atom-input`
(defn atom-input [state]
  [:input {:type "text"
    :style {:display "block"}
    :placeholder "Username"
    :value @state
    :on-change (fn [event]
      reset! state (-> event .-target .-value))}])
; define Reagent component `atom-pw`
(defn atom-pw [state]
  [:input {:type "password"
    :style {:display "block"}
    :placeholder "Password"
    :value @state
    :on-change (fn [event]
      reset! state (-> event .-target .-value))}])

下面我们使用square-bracket "function call"调用两个代理组件atom-inputatom-pw

代码语言:javascript
复制
(defn loginForm [someUrl]
  (let [unVal (atom "") pwVal (atom "")]
    (fn []
      [:div
        [:p "Username: " @unVal]
        [:p "Password: " @pwVal]

        ; Reagent does "magic" here to transform any vector beginning
        ; with a function into a real function call
        [atom-input unVal]             ; line 32
        [atom-pw pwVal]                ; line 33

        [:button "to-do submit button"]])))

(defn app []
  [:div
    [:div
      [:h1 (:text @app-state)]
      [:h3 "Edit this and watch it change!"]]
    [loginForm ""]])

(reagent/render-component [app]
                          (. js/document (getElementById "app")))

(defn on-js-reload []
  ;; optionally touch your app-state to force rerendering depending on
  ;; your application
  ;; (swap! app-state update-in [:__figwheel_counter] inc)
)

提前感谢您的回复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-20 00:15:26

缺少括号。应该如下所示:

代码语言:javascript
复制
(defn atom-input [state]
  [:input {:type        "text"
           :style       {:display "block"}
           :placeholder "Username"
           :value       @state
           :on-change   (fn [event]
                          (reset! state (-> event .-target .-value)))}])

Clojure中的括号进行函数调用。如果没有它们,reset!state将被忽略。此表达式:

代码语言:javascript
复制
(-> event .-target .-value)

将生成一个值,然后由:on-change的匿名函数返回该值。但是,该值将被忽略。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60760471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档