2017-04-24 6 views
0

不思議なことに、コンポーネントをメタデータとしてフック付きの関数として定義すると、コンポーネントライフサイクル関数が呼び出されません。それは私が見た例のように)。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を使用しています。見つかっ

ソリューション:あなたの代わりに、関数のヴァールとしての要素を定義する必要が

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

が、それは正常に動作します - 本当に奇妙な。

理由を説明できる人は誰ですか?

に関して、フリッケ

答えて

1

最初の試みは、第二の試行では、値自体に対応しているメタ情報は、(外部からは見えない)戻り値に対応するために動作(することができませんでした見られる)。

あなたがrenderの横に任意のメソッドを持っていないとき通常、完全なコンポーネントの構文に頼る方が良いでしょう:

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

はい、それははるかに冗長ですが、少なくとも、あなたが瞬時に起こっていると言うことができますに。

+0

これは、試薬が '[my-combo]'を読み取っているときに分析が行われることを意味します。そして、それがマウントされているときだけ、呼び出されます。これはreact.jsフックを追加するには遅すぎますか? – fricke

+0

そうだと思います。 – akond

関連する問題