λ¬Έμ μ β
- μ μ λ§λ μΌκΈ° νλ‘μ νΈμμ μΌκΈ°λ₯Ό μμ νλ©΄ μΌκΈ°λ₯Ό μμ±νλ
Editor
κ° λ λλ§μ΄ λ©λλ€.
- ν
λ리λ₯Ό μ보면 κΉλΉ‘ μ
λλ€.
- μΌκΈ°λ₯Ό μμ νλ κ³Όμ μμ μΌκΈ°
Editor
κ° λ λλ§μ΄ λ μ΄μ λ μ ν μμ΅λλ€.
- κ·Έλ¬λ―λ‘
Editor
λ₯Ό μ΅μ ν νκ² μ΅λλ€.
- μ»΄ν¬λνΈκ° λ λλ§μ΄ μΌμ΄λλ 쑰건μ λ³ΈμΈμ΄ κ°μ§κ³ μλ state μ λ³νκ° μκΈ°κ±°λ, λΆλͺ¨ μ»΄ν¬λνΈκ° 리λ λλ§μ΄ μΌμ΄λκ±°λ, μμ μ΄ λ°μ prop μ΄ λ³κ²½λκ² λλ κ²½μ° λ¦¬λ λλ§μ΄ μΌμ΄λ©λλ€.
β DiaryEditor.js
const DiaryEditor = ({ onCreate }) => {
export default React.memo(DiaryEditor); // React.memo μ¬μ©
- νμ¬
DiaryEditor
λ onCreate νλλ§ ν¨μλ‘ λ°κ³ μμ΅λλ€.
React.memo
λ₯Ό μ¬μ©ν΄μ μ΅μ ν ν μ μλ€κ³ μκ° ν μ μμ§λ§, onCreate
λ κ°μ²΄λ₯Ό μμ±νλ ν¨μ μ
λλ€.
- μ΄μ ν¬μ€ν
μμ λ³Έ κ²μ²λΌ λΉ μμνμ
μΈ κ°μ²΄λ μμ 볡μ¬κ° μΌμ΄λκ³
- λ¨μν
React.memo
λ₯Ό μ¬μ©ν΄μ μ΅μ ν ν μ μμ΅λλ€.
- λ°λλ‘
useMemo
λ₯Ό μ¬μ©ν΄μ μ΅μ νκ° κ°λ₯νμ§ μμκΉ μκ° ν μ μμ΅λλ€.
- νμ§λ§ μ¬μ©νλ©΄ μλ©λλ€.
useMemo
λ ν¨μλ₯Ό λ°ννμ§ μκ³ κ°μ λ°ν ν©λλ€.
- νμ¬ μνλ μν©μ μλμ μ½λλ₯Ό μ¨μ ν
DiaryEditor
μκ² λ³΄λ΄μ£Όλ κ² μ
λλ€.
const onCreate = useCallback((author, content, emotion) => {
const create_date = new Date().getTime();
const newItem = {
author,
content,
emotion,
create_date,
id: dataId.current, // 0 μ κ°λ¦¬ν¨λ€.
};
dataId.current += 1; // id μ κ°μ΄ 1μ© μ¦κ°νλ€.
setData([newItem, ...data]); // μλ‘μ΄ μμ΄ν
μ΄ μλ‘ μ¬λΌμ€κ² νκΈ° μν΄μ newItem μ λ¨Όμ μ¬μ©
}, []);
- μλ‘κ² λ°°μΈ
useCallback
μΌλ‘ ν΄λ³΄κ² μ΅λλ€.
β useCallback
const memoizedCallback = useCallback(
() => {
doSomething(a, b); // 첫 λ²μ§Έ μΈμ (μ½λ°±ν¨μ)
},
[a, b], // λ λ²μ§Έ μΈμ (μμ‘΄μ± λ°°μ΄)
);
- ꡬ쑰λ
useEffect
, useMemo
μ λμΌνκ² μκ²Όμ΅λλ€.
- λ©λͺ¨μ΄μ μ΄μ
λ μ½λ°±μ λ°ν ν©λλ€.
- μ¦, κ°μ λ°ννλκ² μλλΌ
() => { μ½λ°± ν¨μ }
λ₯Ό λ°ν ν©λλ€.
useCallback
μ λ λ²μ§Έ μΈμλ‘ μ λ¬ν μμ‘΄μ± λ°°μ΄ μμ λ€μ΄μλ κ°μ΄ λ³νμ§ μμΌλ©΄
- 첫 λ²μ§Έ μΈμλ‘ μ λ¬ν μ½λ°±ν¨μλ₯Ό κ³μ μ¬μ¬μ© ν μ μλλ‘ λμμ€λλ€.
β μ μ©
const onCreate = useCallback((author, content, emotion) => {
const create_date = new Date().getTime();
const newItem = {
author,
content,
emotion,
create_date,
id: dataId.current, // 0 μ κ°λ¦¬ν¨λ€.
};
dataId.current += 1; // id μ κ°μ΄ 1μ© μ¦κ°νλ€.
setData([newItem, ...data]); // μλ‘μ΄ μμ΄ν
μ΄ μλ‘ μ¬λΌμ€κ² νκΈ° μν΄μ newItem μ λ¨Όμ μ¬μ©
}, []);
- νμ§λ§ μΌκΈ°λ₯Ό μ μ₯νλ©΄ κΈ°μ‘΄μ μλ μΌκΈ°κ° μ λΆ μ¬λΌμ§κ³
λ°©κΈ μμ±ν μΌκΈ°λ§ λ¨λ κ²μ λ³Ό μ μμ΅λλ€.
- μ΄μ λ,
useCallback
μ μ¬μ©νλ©΄μ []
μ μ무 κ°λ λ£μ§ μμμ κ·Έλ μ΅λλ€.
onCreate
ν¨μλ μ»΄ν¬λνΈκ° Mount λλ μμ μ ν λ²λ§ μμ±λκΈ° λλ¬Έμ κ·Έ λΉμμ data
state μ κ°μ λΉ λ°°μ΄ μ
λλ€.
onCreate
ν¨μκ° κ°μ₯ λ§μ§λ§μΌλ‘ μμ±λμμ λ λΉ λ°°μ΄μ΄μμΌλ λλ¨Έμ§ κ°μ μμ κ° λκ³ μλ‘κ² μΆκ°ν νλλ§ μμ±μ΄ λ©λλ€. κ·Έλμ μ무리 μΆκ°νμ¬λ 1κ° μ΄μ μΆκ° λ μ μμ΅λλ€.
ν¨μλ μ»΄ν¬λνΈκ° μ¬μμ± λ λ λ€μ μμ±λλ μ΄μ κ° μμ΅λλ€.λ°λ‘ νμ¬μ stateκ°μ μ°Έμ‘°ν μ μμ΄μΌ νκΈ° λλ¬Έ μ
λλ€.
- κ·Έλ°λ°
onCreate
ν¨μλ μ½λ°±μμμ λμ€λ₯Ό λΉλ°°μ΄λ‘ μ λ¬νκΈ° λλ¬Έμ μ΄ onCreate
ν¨μκ° μκ³ μλ dataμ κ°μ []
λΉ λ°°μ΄ λΏ μ
λλ€.
ν΄κ²°νκΈ° μν΄μ β
- κ²°λ‘ μ μΌλ‘ μμ‘΄μ± λ°°μ΄μ
data
λ₯Ό λ£μ΄μ£Όμ΄μΌ ν©λλ€.
- κ·Έλ°λ° μ΄
[]
λ μκΉλ λ§νλ―μ΄ data
μ μλ κ°μ΄ λ³κ²½λλ©΄ onCreate
ν¨μλ₯Ό μ¬μμ± νκ² λλλ° μ΄λ κ²λλ©΄ λ λ¬Έμ κ° useCallback
ν¨μλ₯Ό μ°κΈ° μ κ³Ό λμΌνκ² λ©λλ€.
β μ΄λ΄ λ ν¨μν μ
λ°μ΄νΈλ₯Ό μ¬μ© ν©λλ€.
setData
μλ κ°μ΄ μλλΌ ν¨μλ₯Ό μ λ¬ ν μλ μμ΅λλ€.
const onCreate = useCallback(
(author, content, emotion) => {
const create_date = new Date().getTime();
const newItem = {
author,
content,
emotion,
create_date,
id: dataId.current, // 0 μ κ°λ¦¬ν¨λ€.
};
dataId.current += 1; // id μ κ°μ΄ 1μ© μ¦κ°νλ€.
setData((data) => [newItem, ...data]); // μλ‘μ΄ μμ΄ν
μ΄ μλ‘ μ¬λΌμ€κ² νκΈ° μν΄μ newItem μ λ¨Όμ μ¬μ©
},
[]
);
[]
λ₯Ό λΉμλ νμ μ΅μ μ state λ₯Ό data
μΈμλ₯Ό ν΅ν΄ μ°Έκ³ ν μ μκ² λλ©΄μ λΉμλ κ°λ₯ν©λλ€.
μ 리
β useCallback()
- useMemo() ν
κ³Ό λΉμ·νμ§λ§ κ°μ΄ μλ ν¨μλ₯Ό λ°ν νλ€λ μ μ΄ λ€λ¦
- μ»΄ν¬λνΈ λ΄μ ν¨μλ₯Ό μ μνλ©΄ λ§€λ² λ λλ§μ΄ μΌμ΄λ λ λ§λ€ ν¨μκ° μλ‘ μ μλλ―λ‘,
- useCallback() ν
μ μ¬μ©νμ¬ λΆνμν ν¨μ μ¬μ μ μμ
μ μμ λ κ²
β μ¬μ©λ²
const memoizedCallback = useCallback(μ½λ°± ν¨μ, μμ‘΄μ± λ°°μ΄);
- μμ‘΄μ± λ°°μ΄μ λ€μ΄μλ λ³μ κ° λ³νμ κ²½μ°μλ§ μ½λ°± ν¨μλ₯Ό λ€μ μ¬μ μνμ¬ λ¦¬ν΄ν¨
β μ°Έκ³