React hooksκ° μ μμΌλ‘ λ¦΄λ¦¬μ¦ λ μ΄ν λ§μ νλ‘ νΈμλ κ°λ°μλ€μ΄ react hooksλ₯Ό μ¬μ©νκ³ μλ€. React hooksλ ν¬κ² λ€μ μΈκ°μ§μ μ₯μ μ κ°μ§λ€.
class componentλ³΄λ€ μ μ μμ μ½λλ‘ λμΌν λ‘μ§μ ꡬνν μ μλ€.- μ μ μ½λμ, νμ§λ§ λͺ λ£ν¨μ μμ§ μλλ€
- μνκ΄λ¦¬ λ‘μ§μ μ¬μ¬μ©μ±μ΄ λ§€μ° λλ€
λ λν react hooks + functional component μ‘°ν©μΌλ‘ κ°λ°μ νκ³ μλ μ
μ₯μμ, hooksλ₯Ό μ¬μ©νκΈ° μ class componentλ‘ κ°λ°νλ λμ λΉκ΅ν΄λ³Έλ€λ©΄ hooksλ₯Ό μ¬μ©νλκ²μ΄ νμ€ν μμ±νλ μ½λμ μλ μ κ³ , κ·Έλ₯ λμΌλ‘ μ½λλ₯Ό μ½μμλ μ½κΈ° μ¬μ΄ λͺ
λ£ν¨μ κ°μ§κ³ μλ€κ³ μκ°νλ€.
React 곡μλ¬Έμμλ hooks μ¬μ©μ λν λκ°μ§ ruleμ λͺ
μνκ³ μλ€.
- Only Call Hooks at the Top Level (μ΅μμ(at the Top Level)μμλ§
Hookμ νΈμΆν΄μΌνλ€)
λ°λ³΅λ¬Έ, 쑰건문 νΉμ μ€μ²©λ ν¨μ λ΄μμHookμ νΈμΆνλ©΄ μλλ€ - Only Call Hooks from React Functions (μ€μ§ React ν¨μ λ΄μμ
Hookμ νΈμΆν΄μΌνλ€)
Hookμ μΌλ°μ μΈJavaScriptν¨μμμ νΈμΆνλ©΄ μλλ€
μμ λκ°μ§ ruleμ μ§ν€λ©΄μ μ¬μ¬μ©μ±μ΄ λ°μ΄λ custom hooksλ₯Ό λ§λ€μ΄μ μ¬μ©ν μ μλ€. (λ³΄ν΅ useSomethingμΌλ‘ λͺ
λͺ
νκ³ hookμ΄λΌκ³ μ묡μ μΌλ‘ ν΅μ©λλ€) Custom hooks μμ±μ λ€μ λκ°μ§λ₯Ό κ³ λ €ν΄μΌνλ€.
Composition (ν©μ±)
custom hookμ λμμ μ¬μ©ν μ μμ΄μΌνκ³ , μλ‘μκ² μν₯μ λΌμΉμ§ μκ³ λ
립μ μΌλ‘ κ³ μ ν λ‘μ§μ κ°μ§κ³ μμ΄μΌ νλ€. μλ₯Ό λ€μ΄ νλμ component λ΄λΆμμ μ¬λ¬κ°μ useStateλ₯Ό μ¬μ©νλ hookμ μ¬μ©νμλ, κ° hookλ€μ μλ‘μκ² μν₯μ μ£Όμ§μκ³ λ
립μ μΌλ‘ λμνκ² λλ€.
function useMyCustomHook1() {
const [value, setValue] = useState(0);
// What happens here, stays here.
}
function useMyCustomHook2() {
const [value, setValue] = useState(0);
// What happens here, stays here.
}
function MyComponent() {
useMyCustomHook1();
useMyCustomHook2();
}Debugging (λλ²κΉ )
custom hookμ΄ μ½λμ λλ²κΉ
λ° νλ‘μ°λ₯Ό νμ
νλλ° μν₯μ λΌμΉμ§ μμμΌ νλ€.
μμμ λ§ν λκ°μ§ κ³ λ €μ¬νμ κ²°κ΅ custom hookμ μμ μ ν¬ν¨νμ¬ λ€λ₯Έ hookμ΄λ componentμ μν₯μ λΌμΉμ§ μμμΌ νλ€λ κ²μ΄λ€. κ·Έλ¦¬κ³ μ€μ λ‘ μ΄λ₯Ό ꡬννκΈ° μν΄μλ 곡ν΅λ κ°μ λ€λ£¨λ λ‘μ§μ custom hookμΌλ‘ λ§λ€μ§ μλ κ²μ΄ μ€μνλ€. νΉν 곡ν΅μΌλ‘ λ€λ£¨κ² λλ windowμ ν¨μλ κ°μ λ€λ£¨λ custom hookμ μ¬λ¬κ° λ§λ λ€κ³ κ°μ ν΄λ³Έλ€λ©΄, μ΄λ ν©μ±κ³Ό λλ²κΉ
μ κ³ λ €μ¬ν λͺ¨λ λ§μ‘±νμ§ λͺ»νλ€. μ΄λ₯Ό 곡ν΅λ componentμ μ€λ³΅μΌλ‘ μ¬μ©νμμλ, μ¬μ©λ hooksλ€μ 곡ν΅λ window κΈλ‘λ² κ°μ²΄λ₯Ό μ°Έμ‘°νκ² λλ―λ‘ μλ‘ μν₯μ μ£Όκ²λλ©° (ν©μ± κ·μΉμ μλ°°), componentμμ μλ¬κ° λ°μλμμλ μ΄λ€ hookμ΄ μμΈμΈμ§ νμ
μ΄ μ΄λ ΅κ³ λͺ¨λ hookμ λ€μ¬λ€ λ΄μΌνλ€ (λλ²κΉ
κ·μΉμ μλ°°).
κ°λ¨ν custom hookμ λ§λ€μ΄λ³΄μ.
import { useState, useCallback } from 'react';
const UseInput = (initialValue = null) => {
const [value, setValue] = useState(initialValue);
const handler = useCallback((e) => {
setValue(e.target.value);
}, []);
return [value, handler, setValue];
};
export default UseInput;μλ reactκ°λ°μ inputμ μμ±ν λμ μ¬μ©λλ useState, onChange λ₯Ό λ¬Άμ΄μ hookμΌλ‘ λ§λ€μ΄λ κ°λ¨ν hookμ΄λ€.
hookμμ±μ λͺκ°μ§ ν€μλλ₯Ό λ³Έλ€λ©΄
- λͺ μΉμ useSomething ννλ‘ μμ±νλ€ (useλ₯Ό μμ λΆμΈλ€)
- λ΄λΆμμλ
useState,useEffectκ°μ λ΄μ₯hookμ μ¬μ©νλ€. returnμcomponentννκ° μλarrayλλobjectννλ₯Όreturnνλ€
μ΄κ²λ€λ§ μ μ§ν€κ³ λ
립μ±μ μ μ§λλ‘ custom hookμ μμ±νλ€λ©΄ κ°λ
μ±μ΄ λκ³ κ΄λ¦¬μ μ¬μ¬μ©μ±μ΄ μ©μ΄ν hookμ μμ±ν μ μλ€.
μ°Έκ³ λ¬Έμ
https://reactjs.org/
https://overreacted.io/why-isnt-x-a-hook/