3 votes

Reagent ne rend pas le composant avec un déréférencement à l'intérieur de let

J'ai des atomes foo :

(defonce foo (r/atom "foo"))

J'ai un composant parent :

(defn parent-component []
  (js/setTimeout #(reset! foo "bar") 5000)
  (child-component {:foo foo}))

Et j'ai un composant enfant :

(defn child-component [props]
  (let [derefed (deref (:foo props))]
    (fn []
      [:div
       [:p derefed]
       [:p (deref (:foo props))]])))

Seul le deuxième paragraphe est mis à jour après la réinitialisation foo .

Pourquoi ça marche comme ça ?

5voto

Chris Murphy Points 41

Extrait de la documentation sur le re-frame concernant les composants Form-2 : https://github.com/Day8/re-frame/wiki/Creating-Reagent-Components#form-2--a-function-returning-a-function .

Vous devez répéter les paramètres de la fonction externe dans la fonction interne :

(defn child-component [props]
  (fn [props]
    (let [derefed (deref (:foo props))]
      [:div
       [:p derefed]
       [:p (deref (:foo props))]])))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X