2016-06-20 14 views
1

om.core/buildom.nextのファクトリ関数は、コンポーネント関数/クラスを参照するReact要素オブジェクトとthe actual component is only instantiated later by React's reconcilerを返します。つまり、(om.core/build some-component data)は実際にはsome-componentと呼ばれません。Omの "component"関数を直接呼び出す必要がありますか?

しかし、私たちはしばしば、単純な "ステートレス"コンポーネントを、小道具を取り、React要素を返す単なる関数として表現します。 (純粋な)Reactの世界では、これらの関数の1つを、コンポーネントクラスのように、React.createElement(AStatelessComponent, {some: "props"})として、またはより便利にはJSXで<AStatelessComponent some="props" />として使用します。それらもAStatelessComponentを参照するReact要素を返しますが、実際には後で呼び出されることはありません。

しかしOmでは、このような単純なコンポーネント(私たちは少なくとも私と私のチームを意味します)があれば、関数を直接呼び出します。したがって、ここ

(render [this] 
    (om/div {} 
     (a-stateless-component {:some "data"}))) 

a-stateless-componentは直ちに呼び出さであり、どのようなことがなく反応させリコンサイラによって後で置換されているよりも、DIV内に直接挿入されて戻ります。

Omでの好ましい方法はありますか?React.createElement?または、レンダリングツリーでコンポーネントインスタンスを作成することをスキップしたとしても、このような関数を直接呼び出すことをお勧めしますか?

答えて

0

ステートレスコンポーネントをインスタンス化する場合は、js/React.createElementに直接電話する必要があります。あなたがそれをしたいと思うのはなぜ

は異なります。

  1. あなたはReact.createElement呼び出す場合、あなたは、あなたが今、ステートレスなコンポーネントをインライン化が、取得しない場合の競合回避
  2. に反応して、インスタンスを「追跡」を取得しますReactのレンダリングツリーで親と区別できません。

編集:私はちょうどom.next/factoryがあなたが話していたステートレスなコンポーネントをインスタンス化できるように十分に許容されていることに気付きました。だから、js/React.createElementを小道具の機能に直接呼び出すか、引数と同じ機能を持つom.next/factoryを呼び出すことによって、両方を望むものを達成することができます。

実例があります。次のコード(のリアクトデベロッパーツールで)以下の成分で

((om/factory #(dom/div nil "Hello, World"))) 

結果:

stateless component

関連する問題