2016-11-25 11 views
1

入力フィールドがReagentでどのように機能するかを理解しようとしています。ClojureScript/Reagentでのバインディングの変更

私は、第1の下地原子を変更する簡単な関数にon-changeをバインドしようとしました:動作しませんでした

(defonce app-state 
    (reagent/atom "Teodor")) 

(defn page [ratom] 
    [:div 
    [:p 
     "Please enter your name: " 
     [:input {:on-change #(swap! ratom %) 
       :value @ratom}]] 
    [:p "Your name is " @ratom]]) 

...。これは、しかし、行います

(fn [evt] 
    (reset! ratom (-> evt .-target .-value))) 
;; is the same as 
(fn [evt] 
    (reset! 
    ratom 
    (.-value (.-target evt)))) 
  1. .-value.-targetは何をしますか:

    (defonce app-state 
        (reagent/atom "Teodor")) 
    
    (defn page [ratom] 
        [:div 
        [:p 
         "Please enter your name: " 
         [:input {;:on-change #(swap! ratom %) 
           :on-change (fn [evt] 
              (reset! ratom (-> evt .-target .-value))) 
           :value @ratom}]] 
        [:p "Your name is " @ratom]]) 
    

    私は->マクロをdesugarことができましたか?

  2. .-value.-targetのドキュメントはどこにありますか?
  3. なぜより複雑なセマンティクスを選択するのですか?

答えて

1

evtは、JavaScriptイベントオブジェクトです。 .-targetおよび.-valueは、イベントが保持する基になる値にアクセスするためのJavaScript DOMプロパティです。

ここではJavaScript interopの世界にいますので、JavaScriptについてはドキュメントを参照してください。

->マクロを使用するかどうかの複雑なセマンティクスは、左から右にプロパティを読み飛ばしたい人にとって便利です。 ->マクロを使用すると、コードが同等のJavaScriptコードに似ています。

+0

私はClojureScriptドキュメントを検索していませんでした。 JavaScriptのドキュメントの推奨ソースはどれですか? MozillaとW3Schoolのドキュメントが見つかりましたが、コード例がありません。 私はあなたが推測したように、ここのWeb開発者ではありません! – Teodor

+0

私はGithub ClojureScriptコードで始まり、特定のJavaScript問題にGoogleを使用しました。そのようなことをすることができない場合は、ClojureScript SlackグループまたはここでSOにお尋ねください。 CSSについてもう少し不安を感じることがあります。 –

関連する問題