Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- redux
- 쓰레드
- 닉네임보이게하기
- 비선형 자료구조
- S.A
- react-full-page
- useref
- onAuthStateChanged
- 자바스크립트
- react
- CS
- Toolkit
- 최종프로젝트
- react-router-dom
- 프로세스
- router
- LAN 과 WAN
- lv.0
- 프로그래머스
- 뒤집기
- 상태변화감지
- #kakaomap
- 배열
- 에러
- 계층
- DoM
- 9쪽이들
- 심화프로젝트
- Firebase
- typescript
Archives
- Today
- Total
행복한 딸기 🍓
[React] useCallback : 함수 자체 memoization 본문
❓ 인자로 들어오는 함수 자체를 기억(메모이제이션)한다!!
(React.memo : 컴포넌트를 메모이제이션)
버튼을 눌러 숫자를 늘리거나 줄이고 초기화 누르면 0으로 다시 초기화된다.
전 편을 보면 React.memo로 메모이제션해서 +, - 버튼을 눌러도 리렌더링이 되지 않았는데
여기에서는 React.memo를 해도 리렌더링이 된다.
➡️ 함수형 컴포넌트를 사용했기 때문이다.
App.jsx에 state를 사용하고 있기 때문에 거기에 초기화 함수를 작성하고,
Box1.jsx에 props를 내려 초기화 기능을 가져왔다.
//App.jsx
const [count, setCounst] = useState(0);
.
.
// count를 초기화해주는 함수
const initCount = () => {
setCount(0);
}
//-------------------------------------------------------
// Box1.jsx
// props로 내려받기
function Box1(){
console.log("Box1 컴포넌트가 렌더링되었다!!");
return(
<button
onClick={()=>{
initCount();
}}
>
초기화
</button>
);
}
App.jsx는 함수형 컴포넌트이다.
렌더링이 될 때마다 작성한 초기화 함수는 새로운 공간에 새로운 주소값을 저장한다.
그렇기에 Box.jsx에 props로 받은 값도 새로운 값이라고 인식하여 다시 렌더링을 하게 되는 것이다.
➡️ 이럴 때 useCallback!!! 으로 함수 자체를 메모이제이션을 한다.
사용
// App.jsx
const initCount = useCallback(() => {
setCount(0);
},[]);
이제 + , - 버튼을 눌러도 박스는 리렌더링되지 않는다.
'TIL' 카테고리의 다른 글
json-server: command not found (0) | 2023.07.04 |
---|---|
[React] useMemo : value memoization (0) | 2023.07.03 |
[React] React.memo : component memoization (0) | 2023.06.28 |
[React] useContext (0) | 2023.06.28 |
[React] useRef (0) | 2023.06.26 |