React.memo は、不必要な再レンダリングを防止することで React コンポーネントのパフォーマンスの最適化に役立つ高次コンポーネント (HOC) です。これは機能コンポーネントをメモ化するために使用されます。つまり、プロパティが変更されていない場合、React はコンポーネントの再レンダリングをスキップします。これは、再レンダリングにコストがかかる可能性がある大規模な React アプリケーションでのパフォーマンスの最適化に特に役立ちます。
React.memo は、コンポーネントのプロパティの浅い比較を実行することによって機能します。プロパティが前のレンダリングと同じである場合、React はコンポーネントのレンダリングをスキップし、代わりに前のレンダリングの結果を使用します。これにより、特に大きなリストや高価なコンポーネントをレンダリングする場合、再レンダリングの回数が大幅に減り、パフォーマンスが向上します。
const MemoizedComponent = React.memo(Component);
場所:
React.memo の使用方法の簡単な例を見てみましょう:
import React, { useState } from 'react'; const ChildComponent = React.memo(({ name }) => { console.log("Child component re-rendered"); return <div>Hello, {name}!</div>; }); function App() { const [name, setName] = useState('John'); const [count, setCount] = useState(0); return ( <div> <ChildComponent name={name} /> <button onClick={() => setName('Doe')}>Change Name</button> <button onClick={() => setCount(count + 1)}>Increment Count</button> <p>Count: {count}</p> </div> ); } export default App;
デフォルトでは、React.memo はプロパティの浅い比較を実行しますが、プロパティの比較方法をさらに制御する必要がある場合は、カスタム比較関数を提供できます。
カスタム比較関数は、コンポーネントを再レンダリングしない場合は true を返し、再レンダリングする必要がある場合は false を返す必要があります。
const ChildComponent = React.memo( ({ name, age }) => { console.log("Child component re-rendered"); return <div>Hello, {name}, {age}!</div>; }, (prevProps, nextProps) => { // Custom comparison: only re-render if name changes return prevProps.name === nextProps.name; } ); function App() { const [name, setName] = useState('John'); const [age, setAge] = useState(30); return ( <div> <ChildComponent name={name} age={age} /> <button onClick={() => setName('Doe')}>Change Name</button> <button onClick={() => setAge(age + 1)}>Increment Age</button> </div> ); }
この例では、カスタム比較関数のおかげで、たとえ age プロパティが変更されたとしても、ChildComponent は name プロパティが変更された場合にのみ再レンダリングされます。
React.memo は、機能コンポーネントの不必要な再レンダリングを防ぐための React のシンプルかつ強力な最適化ツールです。コンポーネントをメモ化し、浅いプロップ比較 (またはカスタム比較関数) を使用することにより、React は、プロップが変更されていないときにコンポーネントのレンダリングをスキップでき、特に大規模または複雑なアプリケーションでのパフォーマンスの向上につながります。
以上がReact のパフォーマンス最適化のための React.memo を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。