title: What does swap! with assoc and (-> % .-target .-value) syntax mean in ClojureScript?
body: <p>I am trying to understund this piece of code from Web Development With Clojure book. Its about clojure script:</p>
  
  <pre><code>(defn message-form [] 
    (let [fields (atom {})] 
     (fn [] 
      [:div.content
       [:div.form-group 
        [:p "Name:"
         [:input.form-control 
          {:type :text 
           :name :name 
           :on-change #(swap! fields assoc :name (-&gt; % .-target .-value)) 
           :value (:name @fields)}]]] 
      [:p "Message:"
       [:textarea.form-control 
        {:rows 4 
         :cols 50 
         :name :message 
         :on-change #(swap! fields assoc :message (-&gt; % .-target .-value))} 
        (:message @fields)]] 
      [:input.btn.btn-primary {:type :submit :value "comment"}]]))) 
  </code></pre>
  
  <p>Can anybody explain this part:</p>
  
  <pre><code>#(swap! fields assoc :name (-&gt; % .-target .-value)
  </code></pre>
  
  <p>especially this:
      ...(-> % .-target .-value)</p>