useCallbackπuseMemoπReact.memo
| νλͺ© | useCallback | useMemo | React.memo |
|---|---|---|---|
| λͺ©μ | ν¨μ μ¬μμ± λ°©μ§ | κ° μ¬κ³μ° λ°©μ§ | μ»΄ν¬λνΈ λ¦¬λ λλ§ λ°©μ§ |
| λ¦¬ν΄ νμ | ν¨μ | κ°(λ°μ΄ν°) | μ»΄ν¬λνΈ (κ³ μ°¨ μ»΄ν¬λνΈ λ°ν) |
| μ£Ό μ©λ | μ½λ°± ν¨μλ₯Ό μμμ μ λ¬ν λ | κ³μ° λΉμ©μ΄ ν° μ°μ° κ²°κ³Όλ₯Ό μΊμ±ν λ | propsκ° κ°μΌλ©΄ 리λ λλ§ λ§κΈ° |
| λμ λ°©μ | μμ‘΄μ± λ°°μ΄μ΄ λ°λ λλ§ ν¨μ μλ‘ μμ± | μμ‘΄μ± λ°°μ΄μ΄ λ°λ λλ§ κ° λ€μ κ³μ° | propsμ μμ λΉκ΅ κ²°κ³Όκ° λμΌνλ©΄ μ¬μ¬μ© |
| μ¬μ© λμ | ν¨μ | κ° (μ«μ, λ°°μ΄, κ°μ²΄ λ±) | ν¨μν μ»΄ν¬λνΈ |
| μΈμ μ¬μ©νλ©΄ μ’μκ° | μμμκ² ν¨μλ₯Ό propsλ‘ λκΈΈ λ | λΉμ©μ΄ ν° κ³μ°μ΄ μμ£Ό λ°μν λ | μμ μ»΄ν¬λνΈκ° λΆνμνκ² λ¦¬λ λλ§ λ λ |
| μ£Όμ μ¬ν | κ³Όλν μ¬μ©μ μ€νλ € μ±λ₯ μ ν | λ©λͺ¨λ¦¬ μ¬μ© μ¦κ° λ° λ³΅μ‘λ μ¦κ° κ°λ₯ | propsλ‘ κ°μ²΄/λ°°μ΄μ λκΈΈ λ useMemo λ³ν νμ |
useCallbackμ»΄ν¬λνΈ λ΄μμ λ§λ ν¨μλ₯Ό μμ μ»΄ν¬λνΈμ propsλ‘ λκΈΈ λ,
ν¨μκ° λ¦¬λ λλ§λ§λ€ μλ‘ μμ±λλ©΄ μμλ 리λ λλ§λ¨ β μ΄λ₯Ό λ§κΈ° μν΄ μ¬μ©
λΆνμνκ² λͺ¨λ ν¨μλ₯Ό κ°μΈλ©΄ μμ‘΄μ± μΆμ λ° λ λλ§ μ΅μ ν λΉμ©μ΄ μ€νλ € λ μ μμ
useMemoμ°μ° λΉμ©μ΄ ν° κ³μ°μ΄ λ°λ³΅λλ κ²½μ° (filter, map, reduce, 볡μ‘ν κ³μ° λ±)
κ°λ¨ν κ°μ λν΄ λ¨μ©νλ©΄ λ©λͺ¨λ¦¬ λλΉ, μ½λ 볡μ‘μ±λ§ μ¦κ°ν¨
React.memoμμ μ»΄ν¬λνΈκ° propsκ° λ³νμ§ μμλ 리λ λλ§ λλ κ²½μ° λ°©μ§
κ°μ²΄λ λ°°μ΄μ΄ propsμΌ κ²½μ°,
λ§€ λ λλ§λ§λ€ μλ‘μ΄ μ°Έμ‘°κ° μκΈ°λ―λ‘ ν¨κ³Όκ° μμ β useMemoλ‘ μ°Έμ‘°κ° μ μ§ νμ
const Child = React.memo(({ onClick }) => {
console.log("Child Rendered");
return <button onClick={onClick}>Click</button>;
});
export default function Parent() {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
console.log("clicked");
}, []);
return (
<>
<div>{count}</div>
<button onClick={() => setCount((c) => c + 1)}>μ¦κ°</button>
<Child onClick={handleClick} />
</>
);
}
Childλ React.memoλ‘ κ°μΈμ Έ μκ³ ,onClickμ useCallbackμΌλ‘ λ©λͺ¨μ΄μ μ΄μ
λμ΄,countκ° λ°λμ΄λ Childλ 리λ λλ§λμ§ μμ