Reactに、オプションの2番目の引数として配列を渡すことで、効果をスキップするように指示できることを知っています。
例えば:
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes
ただし、比較を制御したい場合はどうすればよいですか?独自の比較ロジックを追加します。
関数を2番目の引数として渡すことができるReact.memo
のようなものを期待します。
別の方法として、useRefを使用してデータを保持し、useStateのみを使用して、表示するデータを保存することもできます。時々これはメモのアプローチよりもうまく機能します:私は最近ReactがReact.memoを使用しているときにまだ不必要にレンダリングしていて、いくつかのPIXIディスプレイをめちゃくちゃにしているケースがありました。以下のアプローチは修正されましたそれは私にとって...うまくいけば、私はアンチパターンをしなかった:-)
const countRef = useRef(0);
const [countDisplay, setCountDisplay] = useState(0);
yourUpdateFunction = () => {
// This is where count gets updated
countRef.current = countRef.current + 1;
if ((countRef.current % 2) === 0) setCountDisplay(countRef.current);
}
return (<p>countDisplay</p>);
オプションの2番目の配列引数を渡すと、配列に渡されるプロパティが変更されると、エフェクト関数が起動します。コンポーネントに渡されるプロパティが変更されたときにクラスコンポーネントのshouldComponentUpdate
メソッドが実行されるのと同じです。パラメータの値に基づいてエフェクト関数を決定できます-エフェクトを適用するかどうか。