shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

React:useMemoの動作確認

2024-05-16 2024-05-16
カテゴリ: React

環境

React:v18.3.1

Tips

比較

useMemoを使わない場合

TestUseMemo.tsxの内容

function TestUseMemo() {
  const funcMemo = (() => {
    let temp = 0;
    for (let i = 0; i < 4000000000; i++) {
      temp += i;
    }
    return temp;
  });

  function handleClickBtn() {
    console.log('start date = ', Date());
    console.log('funcMemo = ', funcMemo());
    console.log('end date = ', Date());
  }

  return (
    <>
      TestUseMemo.tsx
      <br />
      <button type="button" onClick={handleClickBtn}>
        ボタン
      </button>
    </>
  );
}

export default TestUseMemo;

結果(コンソールの表示内容)

start date =  Thu May 16 2024 17:48:07 GMT+0900 (日本標準時)
funcMemo =  7999999996067115000
end date =  Thu May 16 2024 17:48:10 GMT+0900 (日本標準時)
start date =  Thu May 16 2024 17:48:12 GMT+0900 (日本標準時)
funcMemo =  7999999996067115000
end date =  Thu May 16 2024 17:48:16 GMT+0900 (日本標準時)

1回目も2回目も約3〜4秒かかっていることがわかる。

useMemoを使う場合

TestUseMemo.tsxの内容

import { useMemo } from 'react';

function TestUseMemo() {
  const funcMemo = useMemo(() => {
    let temp = 0;
    for (let i = 0; i < 4000000000; i++) {
      temp += i;
    }
    return temp;
  }, []);

  function handleClickBtn() {
    console.log('start date = ', Date());
    console.log('funcMemo = ', funcMemo);
    console.log('end date = ', Date());
  }

  return (
    <>
      TestUseMemo.tsx
      <br />
      <button type="button" onClick={handleClickBtn}>
        ボタン
      </button>
    </>
  );
}

export default TestUseMemo;

結果(コンソールの表示内容)

start date =  Thu May 16 2024 17:52:09 GMT+0900 (日本標準時)
funcMemo =  7999999996067115000
end date =  Thu May 16 2024 17:52:09 GMT+0900 (日本標準時)
start date =  Thu May 16 2024 17:52:16 GMT+0900 (日本標準時)
funcMemo =  7999999996067115000
end date =  Thu May 16 2024 17:52:16 GMT+0900 (日本標準時)

レンダリング時に関数の実行結果がキャッシュされているので、即返される。

同一カテゴリの記事