Reactでthis page about performanceについて議論すると、浅い等価性を使用してオブジェクトの変更を避けることができるので、コンポーネントは参照をチェックして、React - オブジェクトIDの変更で再レンダリングしないように深い等価性を使用
私は、反対のことについて実際には疑問に思っています。オブジェクトの参照が変更されたときに、等価チェックで深い等価性を使用し、無視することは可能ですか?
理由は、いくつかの内部変数のクローンバージョンを返すライブラリがあり、それらの変数の更新を表示するために、その内部変数を再質問して新しいクローンを取得する必要があります。ですから、私は全く別のオブジェクトを参照することになりますが、フィールドを変更することはできませんでした。しかし、私がそのような更新をリクエストするたびに、Reactはすべての参照が変更されたためにすべてが変更されたと考え、不要なものをたくさんレンダリングします。
現在のソリューション:限り、オブジェクトのフィールドがlodashのisEqual
平等性チェックが深いので、トリックを行い
shouldComponentUpdate(nextProps, nextState) {
return !_.isEqual(this.props, nextProps) || !_.isEqual(this.state, nextState);
}
を変更しないと、レンダリングからそれを停止するコンポーネントでこれを投げたが、私はこの動作を望む各コンポーネントでこれを行う必要があります。この
または多分を使用しているアンチパターンを達成することのいずれか
- 好ましい方法があります場合、私は疑問に思います上記の方法が最適です。
これをコンポーネントセットのデフォルトの動作として使いたい場合は、おそらく 'React.Component'を拡張して' shouldComponentUpdate'をオーバーライドすることができます。だから、おそらく 'class DeepEqualityComponent extends React.Component'のようなものを持っていて、' DeepEqualityComponent'から拡張します。 – bitstrider