2017-09-21 8 views
3

je atome foo:réactif ne composant pas rerender avec deref-ment intérieur de laisser

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

je composant parent:

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

Et je 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 cela fonctionne-t-il de cette façon?

Répondre

4

À partir de la documentation de réorganisation concernant les composants de formulaire 2: https://github.com/Day8/re-frame/wiki/Creating-Reagent-Components#form-2--a-function-returning-a-function.

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

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

Notez que vous ne devez pas utiliser le formulaire-2 composants pour de tels cas, lorsque vous utilisez re-cadre et son abonnements: https://github.com/Day8/re-frame/issues/218 –