π 리μ‘νΈ Hooks
- 리μ‘νΈμμ ν΄λμ€ν μ»΄ν¬λνΈμ ν¨μν μ»΄ν¬λνΈκ° μμ΅λλ€. κ·Έ μ€μ Hooksλ ν¨μν μ»΄ν¬λνΈμμ μ¬μ©νλ κΈ°λ₯μ λλ€.
- Hooksλ κΈ°μ‘΄μ ν¨μν μ»΄ν¬λνΈμμ ν μ μμλ μν κ΄λ¦¬λ, λ λλ§ ν μμ μ μ€μ νλ κΈ°λ₯ λ±μ μμ μ ν μ μκ² ν΄μ€λλ€.
πuseMemoλ?
useMemo
λ 리μ‘νΈμμ μ»΄ν¬λνΈμ μ±λ₯μ μ΅μ ν νλλ° μ¬μ©λλ Hook
μ
λλ€
useMemo
μμ memoλ MEMOIZATION
μ λ»νλλ° μ΄λ κ·Έλλ‘ ν΄μνλ©΄ βλ©λͺ¨λ¦¬μ λ£κΈ°β λΌλ μλ―Έμ΄λ©° μ»΄ν¨ν° νλ‘κ·Έλ¨μ΄ λμΌν κ³μ°μ λ°λ³΅ν΄μΌ ν λ, μ΄μ μ κ³μ°ν κ°μ λ©λͺ¨λ¦¬μ μ μ₯ν¨μΌλ‘μ¨ λμΌν κ³μ°μ λ°λ³΅ μνμ μ κ±°ν΄ νλ‘κ·Έλ¨ μ€ν μλλ₯Ό λΉ λ₯΄κ² νλ κΈ°μ μ
λλ€.
μ½κ² λ§νλ©΄ λμΌν κ°μ λ°ννλ ν¨μλ₯Ό λ°λ³΅μ μΌλ‘ νΈμΆν΄μΌνλ€λ μ²μ κ°μ κ³μ°ν λ ν΄λΉ κ°μ λ©λͺ¨λ¦¬μ μ μ₯ν΄ νμν λλ§λ€ λ€μ κ³μ°νμ§ μκ³ λ©λͺ¨λ¦¬μμ κΊΌλ΄μ μ¬μ¬μ©νλ κ²μ λλ€.
리μ‘νΈμμ ν¨μν μ»΄ν¬λνΈλ λ λλ§ => μ»΄ν¬λνΈ ν¨μ νΈμΆ => λͺ¨λ λ΄λΆ λ³μ μ΄κΈ°νμ μμλ₯Ό κ±°μΉ©λλ€.
useMemoλ₯Ό μ¬μ©νλ©΄ ν¨μ μ»΄ν¬λνΈ λ΄λΆμμ λ°μνλ μ°μ°μ μ΅μ νν μ μμ΅λλ€. λ¨Όμ 리μ€νΈμ μ«μλ₯Ό μΆκ°νλ©΄ μΆκ°λ μ«μλ€μ νκ· μ λ³΄μ¬ μ£Όλ ν¨μ μ»΄ν¬λνΈλ₯Ό μμ±νκ² μ΅λλ€.
import { useState } from "react";
const getAverage = (numbers) => {
console.log("νκ· κ° κ³μ° μ€...");
if (numbers.length === 0) return 0;
const sum = numbers.reduce((a, b) => a + b);
return sum / numbers.length;
};
const Average = () => {
const [list, setList] = useState([]);
const [number, setNumber] = useState("");
const onChange = (e) => {
setNumber(e.target.value);
};
const onInsert = (e) => {
const nextList = list.concat(parseInt(number));
setList(nextList);
setNumber("");
};
return (
<div>
<input value={number} onChange={onChange} />
<button onClick={onInsert}>λ±λ‘</button>
<ul>
{list.map((value, index) => (
<li key={index}>{value}</li>
))}
</ul>
<div>
<b>νκ· κ°:</b>
{getAverage(list)}
</div>
</div>
);
};
export default Average;
λ€μμΌλ‘ Appμμ μ»΄ν¬λνΈλ₯Ό λ λλ§ νμΈμ
import Average from "./Average";
const App = () => {
return <Average />;
};
export default App;
μ μ½λλ Reactλ₯Ό μ¬μ©νμ¬ κ°λ¨ν νκ· κ° κ³μ°κΈ°λ₯Ό λ§λλ μμ μ
λλ€.
useState
ν
μ μ¬μ©νμ¬ μ«μ λͺ©λ‘κ³Ό μ
λ ₯κ°μ κ΄λ¦¬νκ³ ,
μ
λ ₯κ°μ 리μ€νΈμ μΆκ°νμ¬ νκ· κ°μ κ³μ°ν©λλ€. μ¬μ©μλ μ«μλ₯Ό μ
λ ₯νκ³ βλ±λ‘β λ²νΌμ ν΄λ¦νμ¬ μ«μλ₯Ό μΆκ°ν μ μμ΅λλ€.
μ΄ μ½λλ₯Ό ν΅ν΄ React
μ κΈ°μ΄ κ°λ
λ° μν κ΄λ¦¬ λ°©λ²μ μ΄ν΄ν μ μμ΅λλ€
λΈλΌμ°μ μμ μ«μλ€μ λ±λ‘νλ©΄ νκ· κ°μ΄ λνλ©λλ€.
useState ν μ¬μ©:
- useState ν μ μ¬μ©νμ¬ λ κ°μ§ μνλ₯Ό μ μΈν©λλ€.
- list: μ λ ₯λ μ«μλ€μ μ μ₯νλ λ°°μ΄ μνμ λλ€.
- number: μ λ ₯ νλμ μ λ ₯λ κ°μ μ μ₯νλ λ¬Έμμ΄ μνμ λλ€.
getAverage ν¨μ:
- λ°°μ΄μ 맀κ°λ³μλ‘ λ°μ ν΄λΉ λ°°μ΄μ νκ· κ°μ κ³μ°νλ ν¨μμ λλ€.
- μ λ ₯λ λ°°μ΄μ΄ λΉμ΄μμΌλ©΄ 0μ λ°νν©λλ€.
- κ·Έλ μ§ μμΌλ©΄ λ°°μ΄μ ν©μ ꡬνκ³ , λ°°μ΄μ κΈΈμ΄λ‘ λλμ΄ νκ· κ°μ κ³μ°ν©λλ€.
Average ν¨μ μ»΄ν¬λνΈ:
- ν¨μν μ»΄ν¬λνΈ
Average
λ₯Ό μ μΈν©λλ€. - listμ
number
μνλ₯ΌuseState
ν μ μ¬μ©νμ¬ μ μΈν©λλ€. - onChange ν¨μλ μ
λ ₯ νλμ κ°μ΄ λ³κ²½λ λλ§λ€ νΈμΆλμ΄
number
μνλ₯Ό μ λ°μ΄νΈν©λλ€. - onInsert ν¨μλ λ±λ‘ λ²νΌμ΄ ν΄λ¦λ λ νΈμΆλλ©°,
number
κ°μlist
λ°°μ΄μ μΆκ°ν λ€μ number μνλ₯Ό μ΄κΈ°νν©λλ€. - JSXλ₯Ό λ°ννμ¬ μ¬μ©μκ° μ«μλ₯Ό μ λ ₯ν μ μλ μ λ ₯ νλμ λ±λ‘ λ²νΌμ λ λλ§ν©λλ€.
- μ
λ ₯λ μ«μλ€μ 보μ¬μ£ΌκΈ° μν΄
list
λ°°μ΄μ 맀ννμ¬ μ«μ λͺ©λ‘μ λ§λλλ€. - νκ· κ°μ νμνκΈ° μν΄ getAverage ν¨μλ₯Ό νΈμΆνμ¬
list
λ°°μ΄μ νκ· κ°μ κ³μ°ν©λλ€.
useMemo μ¬μ©ν΄λ³΄κΈ°
useMemo
Hookμ λ λλ§νλ κ³Όμ μμ νΉμ κ°μ΄ λ°λμμ λλ§ μ°μ°μ μ€ννκ³
μνλ κ°μ΄ λ°λμ§ μμλ€λ©΄ μ΄μ μ μ°μ°νλ κ²°κ³Όλ₯Ό λ€μ μ¬μ©νλ λ°©μμ΄λ€
import React, { useState } from "react";
const getAverage = (numbers) => {
console.log("νκ· κ° κ³μ°μ€..");
if (numbers.length === 0) return 0;
const sum = numbers.reduce((a, b) => a + b);
return sum / numbers.length;
};
const Average = () => {
const [list, setList] = useState([]);
const [number, setNumber] = useState("");
const onChange = (e) => {
setNumber(e.target.value);
};
const onInsert = (e) => {
const nextList = list.concat(parseInt(number));
setList(nextList);
setNumber("");
};
const avg = useMemo(() => getAverage(list), [list]);
return (
<div>
<input value={number} onChange={onChange} />
<button onClick={onInsert}>λ±λ‘</button>
<ul>
{list.map((value, index) => (
<li key={index}>{value}</li>
))}
</ul>
<div>
<b>νκ· κ°:</b>
{avg}
</div>
</div>
);
};
export default Average;
μμ μ½λμμ useMemo
λ getAverage
ν¨μμ κ²°κ³Όλ₯Ό λ©λͺ¨μ΄μ μ΄μ
ν΄ , list
λ°°μ΄μ΄ λ³κ²½λ λλ§
νκ· κ°μ λ€μ κ³μ°ν©λλ€. μ΄λ κ² ν¨μΌλ‘μ¨, 리μ€νΈμ λ³νκ° μλ ν νκ· κ°μ λ°λ³΅ν΄μ κ³μ°νλ λΉν¨μ¨μ±μ μ€μΌ μ μμ΅λλ€.
μ¦, useMemo
λ₯Ό μ¬μ©νλ©΄ μ±λ₯μ μ΅μ ννκ³ , λΆνμν κ³μ°μ νΌν μ μμ΅λλ€.
μ΄ κΈμ κΉλ―Όμ€(velopert)λμ 리μ‘νΈλ₯Ό λ€λ£¨λ κΈ°μ μμ°Έμ‘° νμ¬ μμ±ν κΈμ λλ€.