[React.js] useMemo

2024. 6. 26. 12:31React.js

728x90

리액트 훅 중 하나로 불필요한 연산을 최적화해준다

 

동일한 연산이 반복되면 계속 다시 연산시키는 게 아니라

최초에 한번 연산 후 메모리에 결괏값을 저장하고 그 값을 가져오는 방식

 

자식 컴포넌트 내부의 연산은 부모 컴포넌트가 리렌더링이 되면 계속 재실행된다

이는 연산이 짧으면 그나마 괜찮으나 연산이 길어지면 웹 성능을 떨어뜨림

→ 이때 useMemo를 사용해서 연산이 불필요하게 수행되지 않게 하는 거임

 

https://mm-study-front.tistory.com/51

 

[React.js] 최적화

최적화 (optimization): 목적에 따라 가장 좋은 결과가 얻어지도록 성능을 개선하는 행위로  컴파일러에서 원시 프로그램이 목적 프로그램을 생성하는 과정에 있어서, 목적 프로그램의 실행 시간

mm-study-front.tistory.com

 


 

 

사용하려면

import {  useMemo } from "react";

 

import로 넣어주고

 

  useMemo(() => {}, [])

 

useMemo(동일한 연산의 콜백함수, 배열)로 사용해 주면 된다

 

이 배열은 의존성 배열이라 함

→ useMemo는 배열의 값이 변해야만 콜백함수를 실행

 

 

 

useMemo의 큰 장점은 콜백함수를 실행해 얻은 반환값을 반환해 줌

 

이게 무슨 말이냐면

 

  const dataCount = () => {
    const totalCount = a.length;
    const nCount = a.filter((b) => b.n).length;
    const mCount = totalCount - nCount;

    return {
      totalCount,
      nCount,
      mCount,
    };
  };
 
 const { totalCount, nCount, mCount } =  dataCount );
  return (
      <div>
        <div>{totalCount}</div>
        <div>{nCount}</div>
        <div>{mCount}</div>
      </div>
    </div>
  );

 

이런 식으로 함수식의 return 값을 받는 변수를 함수 밖에서 선언해서 사용했어야 했는데

 

 

useMemo는 

  const { totalCount,  nCount , mCount } = useMemo(() => {
    const totalCount = a.length;
    const nCount = a.filter((b) => b.n).length;
    const mCount = totalCount - nCount;

    return {
      totalCount,
      nCount,
      mCount,
    };
  }, []);
 
  return (
      <div>
        <div>{totalCount}</div>
        <div>{nCount}</div>
        <div>{mCount}</div>
      </div>
    </div>

 

이런식으로 바로 사용 가능

 

 

728x90

'React.js' 카테고리의 다른 글

[React.js] useCallback  (88) 2024.06.28
[React.js] React.memo  (76) 2024.06.27
[React.js] 최적화  (86) 2024.06.25
[React.js] useReducer  (87) 2024.06.24
[React.js] 간단한 실습3. 투두리스트 준비  (107) 2024.06.20