| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- git
- react상태관리라이브러리
- 프로그래머스 완전범죄
- 비밀 암호 해독
- 충돌 위험 찾기
- JS우선순위큐
- react-router-dom
- C++
- 프로그래머스 1843
- 프로그래머스 사칙연산
- BFS
- 비동기함수
- 프로그래머스 봉인된 주문
- 프로그래머스 비밀 암호 해독
- 프로그래머스 호텔 방 배정
- 컴퓨터네트워크
- react-quill
- 리렌더링최적화
- react hook
- 프로그래머스 택배 상자 꺼내기
- 프로그래머스 숫자 타자 대회
- zustand
- 프로그래머스 석유 시추
- CSS
- 서버증설횟수
- 프로그래머스 퍼즐 게임 챌린지
- 최소힙우선순위큐
- 다익스트라 Js
- 프로그래머스 충돌 위험 찾기
- 프로그래머스 지게차와 크레인
- Today
- Total
leebaek
[React] 리렌더링 최적화 2편 : useCallback Hook 본문
■ React 최적화 - 리렌더링 최적화를 위해서 !
■ useCallBack
■ 예시 코드
■ 1~2편 리렌더링 최적화 방법 복습
■ React 최적화 - 리렌더링 최적화를 위해서 !
props가 원시값일 경우 컴포넌트 최적화 방법에 대해 알고 싶으시다면,
이전 포스팅을 참고해주시면 감사하겠습니다 !!
https://leebaek.tistory.com/151
[React] props로 함수를 넘겨주자 - 리렌더링 최적화 1편 : memo
■ React 최적화 - 리렌더링 최적화를 위해서 ! ■ React.memo■ 예시 코드 ■ React 최적화 - 리렌더링 최적화를 위해서 ! React에서 컴포넌트는 상태나 props가 바뀔 때 리렌더링 됩니다.이때 컴포넌
leebaek.tistory.com
■ useCallback
: 컴포넌트가 렌더링될 때마다 새로 생성되는 함수를 메모이제이션하여 참조값을 유지하는 Hook
- (이전 포스팅) 컴포넌트가 렌더링될 때 마다 함수가 새로 만들어짐 → 참조값이 달라짐 → memo 하나만으로는 효과 없음
- useCallback을 사용하면 의존성 배열이 바뀌지 않는 이상 이전 함수를 재사용함
→ 함수가 props로 전달될 때 불필요한 리렌더링 방지
첫번째 인자: 메모제이션 하고 싶은 코드
두번째 인자: 의존성 배열 ( *의존성 배열에 있는 값이 변경되면 새로운 함수 생성됨 )
const memoizedCallback = useCallback(
() => {
// 콜백 내용
},
[dependencies],
);
■ 예시 코드
import React, { useState, useCallback } from 'react';
function Parent() {
const [count, setCount] = useState(0);
const increment = useCallback(() => {
setCount((prev) => prev + 1);
}, []); // 의존성 배열이 비어 있으니, 컴포넌트가 렌더링되어도 함수는 그대로!
return (
<div>
<button onClick={increment}>Increment</button>
<Child onClick={increment} />
</div>
);
}
const Child = React.memo(function Child({ onClick }) {
console.log('Child rendered');
return <button onClick={onClick}>Click Child</button>;
});
■ 1~2편 리렌더링 최적화 방법 복습 !
1. React.memo로 컴포넌트 리렌더링 차단
- React.memo는 props가 바뀌지 않으면 리렌더링 방지
- 단, props로 전달되는 함수가 매번 새로 생성되면 의미 없음 !
const Child = React.memo(function Child({ text }) {
console.log("자식 렌더링!");
return <div>{text}</div>;
});
2. useCallback으로 함수 참조 고정
- 렌더될 때마다 새 함수가 생성되는 것을 방지
- React.memo와 함께 쓰는 것이 좋음 !
const handleClick = useCallback(() => {
console.log("clicked");
}, []);
- useCallback이 해당 함수를 메모이제이션해서 렌더링이 다시 되어도 참조가 동일하게 유지됨
→ 따라서, React.memo된 자식 컴포넌트는 불필요한 리렌더링 안함 !
import { useCallback } from "react";
function MyComponent() {
const handleClick = useCallback(function handleClick() {
console.log("clicked!");
}, []);
return <ChildComponent onClick={handleClick} />;
}
다음 포스팅에서는 props가 복잡한 값, 배열, 객체일 경우 리렌더링 최적화 하는 방법에 대해 설명할게요 !! 안녕
'웹 > React' 카테고리의 다른 글
| [React] react-router-dom에 대해 알아보자 - 화면 전환 (1) | 2025.04.11 |
|---|---|
| [React] 리렌더링 최적화 3편 : useMemo Hook (0) | 2025.04.11 |
| [React] 리렌더링 최적화 1편 : React.memo (1) | 2025.04.05 |
| [React] 리액트 폴더 구조 2편 - Feature-Based Structure (0) | 2025.03.27 |
| [React] 리액트 폴더 구조 1편 - Featured-Sliced-Design (0) | 2025.03.27 |