试剂:未使用带元注释的组件功能调用的component-did-mount挂钩

时间:2017-04-24 10:03:57

标签: reactjs clojurescript reagent

奇怪的是,当我将一个组件定义为一个钩子作为元数据的函数时,我的组件生命周期函数不会被调用(这个例子就像在我看到的例子中一样容易)。

(defn my-callback [this] (println (.-innerHTML (reagent/dom-node this))))

(defn inner-compo []
  [:p "content"])

(defn my-compo []
  (with-meta inner-compo
             { :component-did-mount  my-callback })
  )

当我使用reagent/create-class创建组件时,它可以正常工作。我使用了试剂0.6.1

找到解决方案: 您需要将组件定义为Var而不是函数:

(def my-compo
  (with-meta inner-compo
             { :component-did-mount  my-callback })
  )

然后它运作正常 - 非常奇怪。

如果有人能解释原因?

问候,fricke

1 个答案:

答案 0 :(得分:1)

第一次尝试不起作用,因为元信息对应于返回值(无法从外部看到),而在第二次尝试中,它对应于值本身(并且可以看到)。

通常当你在render旁边有任何方法时,最好采用完整的组件语法:

  (reagent/create-class                 
       {:component-did-mount function...
        :component-will-mount function...
        :reagent-render render-function...

是的,它更冗长,但至少你可以立即说明发生了什么。