1. ホーム
  2. reactjs

[解決済み】React.ComponentとReact.PureComponentの比較【終了しました

2022-04-04 11:14:01

質問

公式 Reactドキュメント は、" と記述しています。 React.PureComponent 's shouldComponentUpdate() は浅くしか比較しないので、状態が "深い" である場合は、これを避けるように助言します。

このように考えると、なぜ React.PureComponent Reactのコンポーネントを作成するときに?

質問内容 :

  • を使用した場合のパフォーマンスへの影響はありますか? React.Component を目指すことを検討してもよいと思います。 React.PureComponent ?
  • 私は推測しています shouldComponentUpdate()PureComponent は、浅い比較しかできません。もしそうであれば、当該メソッドはより深い比較に使用できないのでしょうか?
  • さらに React.PureComponent 's shouldComponentUpdate() skip prop updates for whole component subtree" - これは、プロップの変更が無視されるということでしょうか?

これを読んで疑問が生じました ミディアムブログ 参考になれば幸いです。

解決するには?

との大きな違いは React.PureComponentReact.ComponentPureComponent が行います。 浅い比較 状態変化時に つまり、スカラー値を比較するときはその値を比較し、オブジェクトを比較するときは参照のみを比較します。これは、アプリのパフォーマンスを向上させるのに役立ちます。

を使うべきでしょう。 React.PureComponent 以下の条件のいずれかを満たす場合。

  • ステート/プロップスはイミュータブルオブジェクトでなければなりません。
  • State/Propsは階層構造を持たない。
  • を呼び出す必要があります。 forceUpdate データが変更されたとき

を使用している場合 React.PureComponent は、すべての子コンポーネントも純粋であることを確認する必要があります。

React.componentを使用することで、パフォーマンスへの影響はあるのでしょうか? React.PureComponentにすることを検討しますか?

はい、アプリのパフォーマンスが向上します(浅い比較のため)。

<ブロッククオート

PurecomponentのshouldComponentUpdate()は、以下の処理のみを行うものと思われます。 浅い比較。この場合、当該メソッドを使用することはできません。 より深い比較のため?

ご明察です。上に書いた条件のどれかを満たせば使えるはずです。

さらに、React.PureComponentのshouldComponentUpdate()はpropをスキップします。 は、コンポーネントサブツリー全体の更新を行います" - これは、プロップ の変更は無視されるのですか?

はい、浅い比較で違いが見つからなかった場合、プロップの変更は無視されます。