이재호
useMemo 와 useCallback 본문
리액트는 상태나 props가 변경될떄마다 모든 컴포넌트를 재랜더링 합니다
만약 app.js라는 컴포넌트에서 상태를 변경한다고 하면 app.js와 상태가 연결되어있는 하위 컴포넌트들까지 재랜더링이 되면서
성능저하를 일으킵니다 작은단위의 프로젝트면 괜찮지만 큰 규모의 컴포넌트단위 프로젝트 같은 경우에는 큰 리소스를 차지할뿐만 아니라 불필요한 성능저하를 일으킬수 있습니다 그래서 나온것이 useMemo입니다.
useMemo는 props가 실제로 변경되었을때,
새로운 값이 들어올때만 컴포넌트 함수를 재 실행하고 새값이 없다면 재랜더링을 하지 않습니다.
하지만 useMemo도 부족한 점이 있습니다 함수 컴포넌트 안에 함수를 생성해서 props 객체로 넘겨주면
useMemo는 이를 인식하지 못합니다. 그 이유는 객체는 참조값을 따르고 있고 useMemo가 내부적으로 실행하는 등호를 통한 비교는
원시값에 대하여 통용되지 못하기 떄문입니다, 따라서 이때 사용하는것이 useCallback입니다
함수를 useCallback으로 감싸게 되면 이 함수에 대한 재랜더링을 막아줍니다.
'프론트엔드 > 리액트' 카테고리의 다른 글
useEffect와 class 생명주기 (1) | 2023.03.23 |
---|---|
ref란 (0) | 2023.03.18 |
훅 패밀리 (0) | 2023.03.07 |
클래스형 컴포넌트와 함수형 컴포넌트 (0) | 2023.03.05 |
json-server ERR_CONNECTION_REFUSED 오류해결 (0) | 2022.12.05 |