2017-01-22 9 views
2

私はパフォーマンスについてのドキュメントを読んできましたが、私の質問に対する答えは見つかりませんでした。スタートアップ時に反応コンポーネントを一度だけレンダリングする方法は?

私のアプリケーションには、いくつかのプロパティに基づいて表示されるボタンがたくさんありますが、その特性を決して変えないだろう。次に、私はこのonKeyDownイベントハンドラを持っています。これはいくつかのキーをリスンし、別のコンポーネントを更新します。

私の問題は、キーを押してこのコンポーネントを更新すると、他のすべてのボタンもレンダリングされることです(React dev tools for Chromeで観察)。私はshouldComponentUpdate(nextProps, nextState)を私のボタンに実装していませんが、Reactはデフォルトでこの動作をしてはいけませんか?つまり、this.propsnextPropsを比較しても、まったく同じ場合はrender()に電話しないでください。

私は、アプリケーションの起動時に一度だけレンダリングする必要があるすべてのコンポーネントについて、これを自分自身で行うはずですか?

EDIT:PureComponentで問題が解決しそうです...しかし、その代わりに新しい質問を作成するので、私は関連質問でこれを更新しています:ドキュメントはすべてを持ってお勧めしませんなぜ

コンポーネントはデフォルトでPureComponentに基づいていますか?Componentの代わりに、デフォルトでPureComponentを使用することについての議論は何ですか?

+0

パフォーマンス上の問題がありますか、それともそのボタンを更新しないようにしたいのですか? – mguijarr

+0

後者は、ちょうどいい気分にはならない...私が知っているのは、時期尚早の最適化である可能性があるということです。しかし、私はちょうど尋ねています:) –

+0

React.Componentの代わりにReact.PureComponentを見てください(https://facebook.github.io/react/docs/react-api.html参照) – mguijarr

答えて

3

純粋なコンポーネントは、デフォルトで浅い小道具と状態の比較を実装するため、問題を解決するはずです。

Link to the docs.

あなたのリアクトコンポーネントのrender()関数は同じ小道具や状態与えられた同じ結果をレンダリングする場合は、いくつかのケースでパフォーマンスの向上のためにReact.PureComponentを使用することができます。

+0

私はそれらを試してみましたが(質問に言及するのを忘れていました)、React開発ツールはすべてのキープレスですべてのボタンが表示されていることを示しました。私はそのクラスをデフォルトのクラスの代わりに使うべきで、もう何もする必要はないのは正しいのですか? –

+0

2回目の試みでは、それは働いた...申し訳ありません。しかし、これは疑問を抱きます。なぜドキュメントが、デフォルトで 'PureComponent'に基づいてすべてのコンポーネントを持つことを推奨しないのでしょうか? –

+0

@RicardoAmaralエッジケースのためにデフォルトで実装されていません。彼らは何であるかは分かりません。私はちょうどそれをどこかで読んだ。 –

関連する問題