Recent Posts
Recent Comments
Archives
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 리터럴
- array정적메서드
- deep dive
- 소셜 로그인
- 코드카타
- 모던자바스크립트
- git
- 모던 자바스크립트
- 초기셋팅
- 오블완
- 코테
- 프로그래머스
- 자주 까먹는
- 구글 로그인
- vscode
- CORS
- Next
- domain
- 티스토리챌린지
- 프로젝트 셋팅
- useRouter
- js
- 셋팅
- 내일배움캠프
- nextjs
- vercel
- error
- 스파르타코딩클럽
- 코딩테스트
- React
- Today
- Total
파피루스
[React] Hook : useCallback, useMemo 본문
불필요한 렌더링을 줄이기 위해 사용하는 방법들
- React.memo : 컴포넌트 캐싱
- useCallback : 함수캐싱
- useMemo : 값 캐싱
React.memo
function Box () {
return <div>박스</div>;
}
export default React.memo(Box);
❗함수도 function도 참조형 변수이기에, 만약 아래 예시와 같이 함수를 props로 전달하게 된다면 Parent가 리렌더링될 때 React.memo로 지정한 Box 컴포넌트도 리렌더링이 된다.
-> useCallback을 사용하면 렌더링하지 하지 않도록 변경할 수 있다.
function Parent () {
const [count, setCount] = useState(5);
const initCount = () => setCount(0);
return <div><Box initCount={initCount}/></div>;
}
function Box ({ initCount }) {
return <div><button onClick={() => initCount()}>초기화</button></div>;
}
export default React.memo(Box);
useCallback
const cachedFn = useCallback(fn, dependencies)
- fn : 캐싱할 함수
- dependencies : 값이 변경되면 경우, 반응할 값들의 목록
function Parent () {
const [count, setCount] = useState(5);
const initCount =useCallback(() => setCount(0), []);
return <div><Box initCount={initCount}/></div>;
}
function Box ({ initCount }) {
return <div><button onClick={() => initCount()}>초기화</button> </div>;
}
export default React.memo(Box);
useMemo
: 재렌더링 사이에 계산 결과를 캐싱하기 위해 사용한다. (공식 문서)
const cachedValue = useMemo(calculateValue, dependencies);
- calculateValue : 캐싱하려는 값을 계산하는 함수. 순수해야 하며 인자를 받지 않고, 모든 타입의 값을 반환할 수 있어야 한다.
- dependencies : 변경되는 걸 감지할 값들의 목록
const value = useMemo( () => heavyWork(), [] );
'React' 카테고리의 다른 글
react/nextJs font 적용하기 (1) | 2024.08.31 |
---|---|
[Error] Functions cannot be passed directly to Client Components (0) | 2024.08.04 |
[React] Hook : useState, useEffect, useRef, useContext (0) | 2024.05.20 |
[React] 함수형 업데이트 (feat. 순수함수 vs 비순수함수) (0) | 2024.05.20 |
React 시작하기 (주요 개념과 이전 개발 방식과의 차이) (0) | 2024.05.13 |