π Reference

React Hookμ React 16.8 λ²μ λΆν° λμ λ κ°λ μ λλ€. μ΄λ ν¨μν μ»΄ν¬λνΈμμλ μνκ΄λ¦¬μ μλͺ μ£ΌκΈ° λ©μλλ₯Ό μ¬μ©ν μ μλλ‘ λμμ£Όλ κΈ°λ₯μ λλ€.
- ν΄λμ€ μ»΄ν¬λνΈμμλ§ κ°λ₯νλ κΈ°λ₯λ€μ ν¨μν μ»΄ν¬λνΈμμλ νΈλ¦¬νκ² μ¬μ©ν μ μκ² ν΄μ€λλ€.
- μ½λλ₯Ό λμ± κ°κ²°νκ³ , μ»΄ν¬λνΈ κ°μ μν λ‘μ§μ μ¬μ¬μ©νκΈ° μ½κ² λ§λ€μ΄μ€λλ€.
: Reactμμ κ°μ₯ λ§μ΄ μ¬μ©λλ Hookμ λλ€. ν¨μν μ»΄ν¬λνΈμμ μν(State)λ₯Ό κ΄λ¦¬ν μ μκ² ν΄μ€λλ€. κ°λ°μκ° μνκ°μ λ³κ²½νκ³ μ λ°μ΄νΈλ₯Ό ν μ μκ² λμμ€λλ€.
: μ»΄ν¬λνΈ λ λλ§ μ΄νμ νΉμ μμ μ μνν μ μλλ‘ ν΄μ€λλ€. (λ°μ΄ν° κ°μ Έμ€κΈ°, DOM μ‘°μ λ±λ±)
: Reactμ Context APIλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈ νΈλ¦¬ μμμ μ μ μν 곡μ λ₯Ό λμμ€λλ€.
: ν¨μλ₯Ό μ μ₯νμ¬ μ±λ₯ μ΅μ νλ₯Ό λμμ€λλ€. λν λΆλͺ¨ μ»΄ν¬λνΈκ° λ€μ λ λλ§ λμ΄λ ν¨μλ₯Ό μλ‘ μμ±νμ§ μκ³ μ¬μ¬μ©ν μ μλ€λ νΉμ§μ΄ μμ΅λλ€.
: νΉμ κ°μ μ μ₯νμ¬ μ±λ₯ μ΅μ νλ₯Ό λμμ€λλ€. κ³μ° λΉμ©μ΄ ν° μ°μ°μ μννκ±°λ λμΌν κ°μ μ¬λ¬ λ² κ³μ°νμ§ μλλ‘ ν λ μ¬μ©ν©λλ€.
: μ»΄ν¬λνΈμμ DOM μμλ₯Ό μ ννκ±°λ μ°Έμ‘°νκΈ° μν΄ μ¬μ©ν©λλ€. ref κ°μ²΄λ₯Ό μμ±νμ¬ DOM μμμ μ κ·Όν μ μμ΅λλ€.
: useEffect μ μ μ¬νκ² μλλλ Hook μ
λλ€. λ λλ§ ν λκΈ°μ μΌλ‘ μ€νλκΈ°μ μ£Όλ‘ DOM μ‘°μκ³Ό κ΄λ ¨λ μμ
μ μ¬μ©ν©λλ€.
컀μ€ν ν (Custom Hook)μ κ°λ°μκ° μ§μ λ§λ Hookμ λ»ν©λλ€. ν¨μν μ»΄ν¬λνΈμμ μν λ‘μ§(Stateful Logic)μ μ¬μ¬μ©ν μ μλλ‘ ν©λλ€. λν 컀μ€ν ν μ μ¬μ©νλ©΄ μ¬λ¬ μ»΄ν¬λνΈμμ 곡ν΅μ μΌλ‘ μ¬μ©λλ μν λ‘μ§μ μΆμΆνμ¬ νλμ ν¨μλ‘ λ§λ€μ΄ μ¬μ©ν μ μμ΅λλ€.
- 컀μ€ν Hookμ ν΄λμ€ν μ»΄ν¬λνΈμμ λ°μνλ 보μΌλ¬ νλ μ΄νΈ μ½λμ λ¬Έμ μ μ½λ κ°λ μ± μ ν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
- μμλ‘, 컀μ€ν Hookμ μ¬μ©νμ¬ Input κ΄λ¦¬λ λ°μ΄ν° κ°μ Έμ€κΈ°(fetch) λ± λ°λ³΅λλ λ‘μ§μ κ°λ¨ν ꡬνν μ μμ΅λλ€.
- 컀μ€ν Hookμ ν¨μλ‘ μΆμΆνμ¬ μ¬μ¬μ©ν μ μκ² ν΄μ£Όλ©°, μν κ΄λ¦¬μ μλͺ μ£ΌκΈ° λ‘μ§μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλλ‘ ν΄μ€λλ€.
μλ μ½λλ
useLocalStorageλΌλ 컀μ€ν ν μ ꡬνν©λλ€.
useLocalStorageλ λ‘컬 μ€ν 리μ§λ₯Ό μ¬μ©νμ¬ νΉμ μνλ₯Ό μ μ₯νκ³ κ΄λ¦¬ν©λλ€.
import { useState } from 'react';
// useLocalStorageλ λ‘컬 μ€ν 리μ§μ μνλ₯Ό μ μ₯νκ³ κ΄λ¦¬νλ 컀μ€ν
ν
μ
λλ€.
function useLocalStorage(key, initialValue){
// λ‘컬 μ€ν 리μ§μμ propsλ‘ λ°μμ¨ keyμ ν΄λΉνλ κ°μ κ°μ Έμ΅λλ€.
const storedValue = localStorage.getItem(key);
// μ΄κΈ°κ°μ΄ μλ€λ©΄ storedValueλ₯Ό, μλ€λ©΄ initialValueλ₯Ό μ¬μ©ν©λλ€
const inital = storedValue ? JSON.parse(storedValue) : initialValue;
// useStateλ₯Ό μ¬μ©νμ¬ μν μ
λ°μ΄νΈ funcλ₯Ό μμ±ν©λλ€.
const [value, setValue] = useState(initial);
// μνκ° μ
λ°μ΄νΈλ λλ§λ€ λ‘컬 μ€ν 리μ§μ κ°μ μ μ₯ν©λλ€.
const updateValue = (newValue) => {
setValue(newValue);
localStorgae.setItem(key, JSON.stringify(newValue));
};
return [value, updateValue];
}
// μμ κ°μ΄ μμ±ν 컀μ€ν
ν
μ μλμ κ°μ΄ μ¬μ©ν μ μμ΅λλ€.
// μλ μ»΄ν¬λνΈλ Countλ₯Ό ν΄λ¦ μ 1μ© μ¦κ°νλ κΈ°λ₯μ μνν©λλ€.
function DaeHyeonComponent(){
// count μν ('count'λΌλ ν€λ‘ λ‘컬 μ€ν 리μ§μ μν μ μ₯)
const [count, setCount] = useLocalStorage('count', 0);
return(
<div>
<p>Count : {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
μ μμμ κ°μ΄ λ€μν 컀μ€ν ν μ λ§λ€μ΄ νμ©νλ©΄ λ°λ³΅λλ λ‘μ§μ μΆμννμ¬ μ½λλ₯Ό λ κ°κ²°νκ² μμ±ν μ μμΌλ©° μμ°μ±μ ν₯μμν¬ μ μμ΅λλ€.