「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > useMemo フックの説明

useMemo フックの説明

2024 年 11 月 2 日に公開
ブラウズ:713

useMemo Hook Explained

useMemo フックは、React 16.8 で導入された React のフック API の一部であり、高価な計算の結果をメモ化することでパフォーマンスを最適化するように設計されています。詳細な説明は次のとおりです:

useMemoとは何ですか?

useMemo はメモ化された値を返すフックです。これにより、計算結果をキャッシュできるため、依存関係が変更されない限り、レンダリングのたびに計算結果を再計算する必要がなくなります。これは、不必要な再レンダリングを防ぎ、React アプリケーションのパフォーマンスを向上させるのに役立ちます。

構文

const memoizedValue = useMemo(() => {
  // computation or expensive calculation
  return value;
}, [dependencies]);

パラメータ

  1. 関数(コールバック): メモ化したい値を返す関数。
  2. 依存関係の配列: 変更されたときにメモ化された値が再計算される依存関係の配列。この配列が空の場合、値は 1 回だけ計算されます (componentDidMount など)。

仕組み

  • 最初のレンダリングで、useMemo は提供された関数を実行し、その結果を返します。その結果は memoizedValue に保存されます。
  • その後のレンダリングで、React は依存関係が変更されたかどうかを確認します。そうでない場合は、再計算する代わりにキャッシュされた値を返します。
  • 依存関係が変更された場合、React は関数を再度実行し、キャッシュされた値を更新して、新しい値を返します。

useMemo を説明する簡単な例を次に示します:

import React, { useState, useMemo } from 'react';

const ExpensiveComponent = ({ number }) => {
  const computeFactorial = (n) => {
    console.log('Calculating factorial...');
    return n  computeFactorial(number), [number]);

  return (
    

Factorial of {number} is {factorial}

); }; const App = () => { const [num, setNum] = useState(0); return (
); }; export default App;

useMemo を使用する場合

  • 高価な計算: パフォーマンスの点で高価な計算があり、特定の入力が変更された場合にのみ再計算する必要がある場合は、useMemo を使用します。
  • 不必要なレンダリングの回避: オブジェクトまたは配列を小道具として子コンポーネントに渡す場合、useMemo を使用してレンダリングのたびにそれらが再作成されないようにすることで、不必要な再レンダリングを防ぐことができます。

重要な考慮事項

  • パフォーマンス: useMemo を過度に使用すると、コードがより複雑になる可能性があり、必ずしもパフォーマンス上の利点が得られるとは限りません。本当に高価な計算に使用するのが最善です。
  • 関数の再作成: 関数をメモ化している場合は、useCallback.
  • でラップしない限り関数定義が再作成されるため注意してください。

結論

useMemo は、値をメモ化することでパフォーマンスを最適化するための React の強力なツールです。これにより、コストのかかる計算が必要な場合にのみ実行されるようになり、React コンポーネントの効率が向上します。ただし、コードが不必要に複雑になるのを避けるために、慎重に使用する必要があります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/imyusufakhtar/usememo-hook-explained-2gee?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3