2016-07-29 6 views
1

ページに5つのコンポーネントがあると、ストアから何かを得ることができます。彼らはすべて1つの店を聴いています。すべてのコンポーネントについて、店舗内にリスナーを作成します。ストアを聞いてvs forceUpdate()

私の質問です - リスナーの代わりにforceUpdate()を使用できますか?店舗で何かを送信し、更新を待つ:

店で
getInitialState: function() { 
    return {val: Store.getFoo}; 
}, 
click: function(info) { 
    Store.updateInfo(info, function() { 
    this.forceUpdate(); 
    }) 
} 

updateInfo: function(info, callback) { 
    foo = info + someValue; 
    callback() 
} 

しかし、ドキュメントの

:通常

あなたがforceUpdateのすべての使用を避けるために試してみてください()とrender.()のthis.propsとthis.stateからのみ読み込みます。これにより、アプリケーションのシンプルさと効率が向上します

ありがとうございます。

答えて

1

forceUpdateを使用しますが、ではありません。

現在のアプローチは正しいです(forceUpdateを使用しない)。

これらの共通の親を持ち、子にデータを渡すと、親コードが膨れ上がり、ストアが変更されたときに6つのコンポーネント(親、5子)がレンダリングされます。ストアをリッスンするこれらの「コンテナ」コンポーネントを多く持つと、コンポーネント間のアイソレーション(「独立した子」)が増え、ストアの更新時にコンポーネントの再レンダリングが少なくなるため、パフォーマンスが向上します。 shouldComponentUpdateも必ず使用してください。 https://www.youtube.com/watch?v=KYzlpRvWZ6c

+0

はそれを得た、ありがとう:あなたは「独立した子供たち」と、より高いパフォーマンスについての詳細を学ぶしたい場合は

は、時計、反応します! – nick

+0

時々 'shouldComponentUpdate'は、コンポーネントが> 10のプロパティを持つオブジェクトを待っていて、1つしか変更できないときのお尻の痛みです。 – nick

+0

また、なぜ私はすべきではないのだろうか?ストアから変数 'render'を得ることができます - ' let var = Store.getVar(); '。私がstoreで 'var'を変更した場合は、' forceUpdate() 'を実行できます。私は「独立した子供たち」でもそれをすることができます。私が新しい小道具を送ってこない場合、 'ForceUpdate'は子どもを再レンダリングしません。コードが少なくても、私は 'state'に変数を保持する必要はありません。店舗でのみ – nick

関連する問題