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/