
useMemo フックは、React 16.8 で導入された React のフック API の一部であり、高価な計算の結果をメモ化することでパフォーマンスを最適化するように設計されています。詳細な説明は次のとおりです:
useMemoとは何ですか?
useMemo はメモ化された値を返すフックです。これにより、計算結果をキャッシュできるため、依存関係が変更されない限り、レンダリングのたびに計算結果を再計算する必要がなくなります。これにより、不必要な再レンダリングを防ぎ、React アプリケーションのパフォーマンスを向上させることができます。
構文
1 2 3 4 | const memoizedValue = useMemo(() => {
return value;
}, [dependencies]);
|
ログイン後にコピー
パラメータ
-
関数 (コールバック): メモ化したい値を返す関数。
-
依存関係の配列: 変更されるとメモ化された値が再計算される依存関係の配列。この配列が空の場合、値は 1 回だけ計算されます (componentDidMount など)。
仕組み
- 最初のレンダリングで、useMemo は提供された関数を実行し、その結果を返します。その結果は memoizedValue に保存されます。
- 後続のレンダリングで、React は依存関係が変更されたかどうかを確認します。そうでない場合は、再計算する代わりにキャッシュされた値を返します。
- 依存関係が変更された場合、React は関数を再度実行し、キャッシュされた値を更新して、新しい値を返します。
例
useMemo を説明する簡単な例を次に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import React, { useState, useMemo } from 'react' ;
const ExpensiveComponent = ({ number }) => {
const computeFactorial = (n) => {
console.log( 'Calculating factorial...' );
return n <= 0 ? 1 : n * computeFactorial(n - 1);
};
const factorial = useMemo(() => computeFactorial(number), [number]);
return (
<div>
<h1>Factorial of {number} is {factorial}</h1>
</div>
);
};
const App = () => {
const [num, setNum] = useState(0);
return (
<div>
<button onClick={() => setNum(num + 1)}>Increase Number</button>
<ExpensiveComponent number={num} />
</div>
);
};
export default App;
|
ログイン後にコピー
useMemo を使用する場合
-
負荷の高い計算: パフォーマンスの点で負荷が高く、特定の入力が変更された場合にのみ再計算する必要がある計算がある場合は、useMemo を使用します。
-
不必要なレンダリングの回避: オブジェクトまたは配列を小道具として子コンポーネントに渡す場合、useMemo を使用して、レンダリングのたびにそれらが再作成されないようにすることで、不必要な再レンダリングを防ぐことができます。
重要な考慮事項
-
パフォーマンス: useMemo を過度に使用すると、コードがより複雑になる可能性があり、必ずしもパフォーマンス上の利点が得られるとは限りません。本当に高価な計算に使用するのが最善です。
-
関数の再作成: 関数をメモ化している場合は、useCallback でラップしない限り関数定義が再作成されるため注意してください。
結論
useMemo は、値をメモ化することでパフォーマンスを最適化するための React の強力なツールです。これにより、コストのかかる計算が必要な場合にのみ実行されるようになり、React コンポーネントの効率が向上します。ただし、コードが不必要に複雑になるのを避けるために、慎重に使用する必要があります。
以上がuseMemo フックの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。