React κ°λ°μ νλ€λ³΄λ©΄ useState
κΈ°λ₯μ μμ£Ό λ§μ΄ μ¬μ©νλλ°μ, μλ₯Ό λ€μ΄μ κ°λ¨ν μΉ΄μ΄ν° μ»΄ν¬λνΈλ₯Ό λ§λ€μμ΅λλ€.
const Counter = () => {
const [count, setCount] = useState(0);
const incrementNumber = () => {
setCount(count + 1);
console.log(count);
};
return (
<button onClick={incrementNumber}>
{count}
</button>
);
}
μΉ΄μ΄ν°λ₯Ό μ°μ΄λ³΄λ©΄...
κ·Έλ°λ° μ΄μνμ£ ? μ½μκ³Ό λμ€νλ μ΄κ° μ°¨μ΄λλ μν©μ΄ λ°μν©λλ€.
μ΄ λ¬Έμ λ₯Ό Closureμ Scope λΌκ³ ν©λλ€.
Closureλ ν¨μκ° μ μΈλ λ μ컬 νκ²½μ κΈ°μ΅νμ¬ ν¨μκ° λ μ컬 νκ²½ λ°μμ μ€νλ λμλ μ΄ νκ²½μ μ κ·Όν μ μκ² νλ κΈ°λ₯μ λλ€. μ¦, ν¨μλ μμ μ΄ μ μΈλ λ²μ λ°μ λ³μλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
Scopeλ νλ‘κ·Έλ¨μμ λ³μ, ν¨μ, μμ λ±μ μλ³μκ° μ ν¨ν λ²μλ₯Ό μλ―Έν©λλ€. μ¦, μ΄λμμ μ΄λ€ μλ³μλ₯Ό μ¬μ©ν μ μλμ§λ₯Ό κ²°μ ν©λλ€.
μμ μν©μ μμλ‘ λ€μλ©΄
count
κ°μ λ°μνμ§λ§ incrementNumber()
ν¨μλ μ΄κΈ° κ°μ μ¬μ©ν©λλ€.incrementNumber()
ν¨μ λ΄μμ count
κ° μ
λ°μ΄νΈκ° λ λλ§ μ΄νμ λ°μν©λλ€.const incrementNumber = () => {
setCount(count + 1); // 0 -> 1 μ¦κ°
console.log(count); // 0 μΆλ ₯
};
μ΄λ° μν©μ ν΄κ²°νκΈ° μν΄μλ λ€μν λ°©λ²μ΄ μλλ°μ. κ·Έ μ€ λͺ κ°μ§λ₯Ό μ μν©λλ€.
setCount((prev) => {
const newCount = prev + 1;
console.log(newCount);
return newCount;
});
setState μ½λ°±ν¨μ λ΄μ argλ‘ μ΄μ κ°μ λ°ννκΈ° λλ¬Έμ, μνλ κΈ°λ₯μ λ£μ΄λ²λ¦¬λ©΄ ν΄κ²°λ κ² μ λλ€. μ κ° μμ£Ό μ¬μ©νλ λ°©λ²μ΄κΈ°λ νꡬμ.
useEffect(() => {
if (count === 10) console.log('10 μ
λλ€.');
}, [count]);
λλ useEffectλ₯Ό νμ©νμ¬ dependency arrayμ κ°μ§ν λ³μλ₯Ό λ£μ΅λλ€.
let count2 =0;
const countRef = useRef(0);
return (
<>
<button
onClick={() => {
count2 += 1;
console.log(`let ${count2}`);
}}
>
let {count2}
</button>
<button
onClick={() => {
countRef.current += 1;
console.log(`ref ${countRef.current}`);
}}
>
useRef {countRef.current}
</button>
</>
);
μ£Όμν μ μ letκ³Ό useRefλ κ° λ³νμ λ°λΌ λ λλ§ νΈλ¦¬κ±°νμ§ μμ νλ©΄μλ 0λ§ λ³΄μ΄κ² λ κ² μ λλ€.
λμ€νλ μ΄ μ©μΌλ‘λ μ ν©νμ§ μκ΅°μ. νμ§λ§ ν¨μ λ΄ μν κ°μ§λ‘λ μ μ ν μ§ λͺ¨λ₯΄κ² μ΅λλ€.
μ λ΅μ μλκ² κ°μ΅λλ€. μ΅μ ν λ±μ κ³ λ €νμ¬ μ μ ν κ³³μ μ¬μ©νλ©΄ μ’κ² λ€μ.