

const calculate = useCallback((num) => {
return num + 1;
}, [item])

함수형 컴포넌트
function Component() {
const calculate = (num) => {
return num + 1
};
return <div> {value} </div>
};
useCallback으로 감싼 함수형 컴포넌트
function Component() {
const calculate = useCallback((num) => {
return num + 1
}, [item]);
return <div> {value} </div>
};
컴포넌트가 다시 렌더링 되더라도 calculate가 초기화 되는 것을 막을 수 있음
컴포넌트가 맨 처음 렌더링 될 때만 함수 객체를 만들어서 calculate를 초기화 해주고, 이후에 렌더링이 될 때는 calculate 변수가 새로운 함수 객체를 다시 할당받는게 아닌 이전에 이미 할당받은 함수 객체를 계속해서 가지고 있으면서 재사용 함
렌더링 -> Component 함수 호출 -> Memoization된 함수를 재사용
const calculate = useCallback((num) => {
return num + 1;
}, [item])
import React, { useEffect, useState } from "react";
function UseCallbackHook() {
const [number, setNumber] = useState(0);
const someFunction = () => {
// 현재 number State 안에 어떤 숫자가 있는지 보여줌
console.log(`someFunc: number: ${number}`);
return;
};
// 첫 렌더링시, someFunction이 변경시 실행
useEffect(() => {
console.log("someFunction이 변경되었습니다.");
}, [someFunction]);
return (
<div>
<input
type="number"
value={number}
// input 안의 숫자가 바뀔때마다 setNumber 호출해서 number State update해줌
onChange={(e) => setNumber(e.target.value)}
></input>
<br />
<button onClick={someFunction}>Call someFunc</button>
</div>
);
}
export default UseCallbackHook;



처음 렌더링 시 useEffect가 한 번 불리고, Call someFunc 버튼 클릭시 number State안에 0이 잘 들어가 있는 것을 볼 수 있음
number State를 증가시켜도 useState는 불리지 않음




UseCallbackHook2

Box



박스 사이즈를 변경하면 '박스 사이즈 키우기'가 console에 출력됨
그런데 Theme 변경은 박스 사이즈와 전혀 연관이 없는데도
Change Theme 버튼 클릭시에도 '박스 사이즈 키우기'가 console에 출력됨
State 변화 -> 다시 렌더링 -> CreateBoxStyle 초기화 되기 때문에 일어나는 현상
비효율적이기 때문에 CreateBoxStyle이 size가 바뀌었을때만 초기화가 되도록 코드 수정하자!
useCallback으로 CreateBoxStyle 감싸주기
