가수면

useMemo / useCallback 본문

React/React

useMemo / useCallback

니비앙 2022. 12. 10. 15:06

Memo

input창에 타이핑하면 그때마다 리렌더링 되는 것을 막아줌.

// components/Button.js

import React, { memo } from "react";

const Button = () => {
  console.log("리렌더링되고 있어요.");
  return <button>버튼</button>;
};

export default memo(Button);

그러나 Memo는 아래와 같이 함수를 props로 전달 받게 되면 다시 리렌더링되기 시작하는 한계가 있음 (useState의 변경으로 인해 App.js가 리렌더링되면서 App.js에 있는 함수, 배열이나 객체가 재실행, 재생성되기 때문에 그 값을 props로 부모로부터 넘겨받으면 당연히 리렌더링이 일어남)

// components/Button.js

import React, { memo } from "react";

const Button = ({ onClick }) => {
  console.log("리렌더링되고 있어요.");
  return <button onClick={onClick}>버튼</button>;
};

export default memo(Button);

 

useCallback

대상이 함수일 때 사용

  //useState와 매우 흡사
  const onClickHandler = useCallback(() => {
    console.log("hello button!");
  }, []);

 

useMemo

대상이 객체나 배열일 때 사용

// src/App.jsx

  const data = [
    {
      id: 1,
      title: "react",
    },
  ];

// useMemo 적용
  const data = useMemo(() => {
    return [
      {
        id: 1,
        title: "react",
      },
    ]
  }, []);

 

※무분별한 사용은 오히려 퍼포먼스 성능의 저하를 가져올 수 있다. 리렌더링이 반드시 필요한 component나 값에는 위의 hook들을 사용하지 않는 게 더 좋음 (굳이 비교를 하지 않아도 될 것에도 react가 비교하는 과정을 추가하기 때문.)

'React > React' 카테고리의 다른 글

useRef  (0) 2022.12.21
커스텀 훅  (0) 2022.12.10
리액트에서 모달창 띄우기  (0) 2022.12.07
map으로 돌릴 때 데이터 타입  (0) 2022.12.05
useEffect  (0) 2022.12.02
Comments