-
[React] memo, useMemo 란?공부/React 2024. 2. 25. 16:37
1. React.memo
- memo는 함수 컴포넌트를 렌더링하는 동안 이전 렌더링 결과를 기억해, 동일한 props가 전달될 경우 이전 결과를 재사용하여 렌더링을 방지한다.
- 즉, 특정 컴포넌트로 전달되는 props가 변할때만 재렌더링을 하기 때문에 불필요한 재렌더링을 방지한다.
- useMemo = useEffect와 비슷한 용도이지만
import {memo, useState} from 'react' let Child = memo( function(){ console.log('재 렌더링 됐습니다.'); return <div> 자식 컴포넌트 </div> }) function Parents () { let [count, setCount] = useState(0) return ( <div> <Child /> <button onClick={()=>{ setCount(count+1) }}> 확인용 버튼 </button> </div> ) } export default Parents;
- memo를 사용하는 방법은 원하는 컴포넌트의 정의 부분을 감싸면 된다. ( let 컴포넌트명 = function( ){ } 형태)
- 위 예제를 보면 버튼 클릭 시 자식 컴포넌트로 전송되는 props가 변하면 자식 컴포넌트가
재 렌더링되도록 만들어져있다. - memo는 불 필요한 렌더링을 막을 수 있지만 무분별하게 사용하면 오히려 성능저하를 일으킬 수 있어
반드시 필요한 곳에만 사용하도록 하자.
2. React.useMemo
- useMemo는 이전에 계산된 값을 기억하고, 해당 값이 변경되지 않은 경우 이전 값을
재사용하도록 하는 React Hook이다. - 즉, Memoization (기존 결과값을 어딘가 저장하여 동일한 입력이 들어오면 재활용하는 프로그래밍 기법)
된 값을 반환한다.
import {useMemo, useState} from 'react' function Child (){ return "Chicken"; } function Parents () { let Chicken_value = useMemo(()=>{ Chicken() }, []; return ( <div> <div>{Chicken_value}</div> </div> ) } export default Parents;
- 위 예제를 보면 컴포넌트가 렌더링 될 때 마다 Chicken_value라는 값이 초기화 된다.
- 즉, 렌더링 될 때마다 Chicken() 함수가 불필요하게 재호출된다는 것으로 Chicken()함수가
매우 복잡한 함수인 경우 비효율적인 상황이 된다. - useMemo를 사용하면 처음 값을 저장해 계속 재 렌더링 된다 해도 값이 달라지지
않는한 저장된 값을 재사용하기 때문에 효율적으로 동작하게 된다. - 추가로 useEffect 처럼 dependency도 넣을 수 있어 특정 state, props가 변할 때만 실행도 가능하다.
'공부 > React' 카테고리의 다른 글
[React] useTransiton 이란? (0) 2024.02.29 [React] Automatic Batching 이란? (0) 2024.02.27 [React] React.lazy 란? (1) 2024.02.25 [React] localStorage 브라우저 데이터 저장 2 (최근 본 상품(페이지) 기록하기) (0) 2024.02.22 [React] 자식 컴포넌트에서 부모 컴포넌트로 데이터 전달하기 (0) 2024.02.22