clojure - Image Won't Update with Swap -


the following code displays 5 different emojis @ bottom of screen, , 1 emoji in upper center. trying make when 1 of emojis on bottom clicked, same emoji appears @ top center. able update atom contains emoji history :on-click, image not update current url.

(def emoji-history     (atom {:current "img/sad-tears.png"}))  (defn img40 [src reaction]  [:img {:src src         :style {:width "60px"                 :padding-right "20px"}         :on-click #(do                     (js/console.log (get @emoji-history :current))                     (swap! emoji-history assoc :current src)                     (js/console.log (get @emoji-history :current)))}])  (defn currentemoji []           [:img {:style {:width 40 :margin-top 15}                  :src (get @emoji-history :current)}])  (defn emojidisplay []     [:div {:style {:text-align "center"}}      [currentemoji]      [:div {:style {:text-align "center"                     :margin-top "200px"                     :padding-left "20px"}}       [img40 "img/smile.png" "happy"]       [img40 "img/sad-tears.png" "sad"]       [img40 "img/happy-tears.png" "amused"]       [img40 "img/surprised.png" "surprised"]       [img40 "img/angry.png" "angry"]]]) 

refer reagent.core namespace , use reagent atom this:

(ns my-name.space.etc   (:require [reagent.core :as r]))  (def emoji-history   (r/atom {:current "img/sad-tears.png"})) 

the line of code have here...

(swap! emoji-history assoc :current src) 

...where swap! atom's value, correct :-)

unlike plain old clojure atom, when reagent atom's value (state) changed, re-render of ui triggered.

rarely entire ui re-rendered, though. because reagent wraps react, react system work out minimal required changes dom, it's pretty efficient.


Comments