HookπŸ₯Š

miniΒ·7일 μ „
0

였늘 λ³΅μŠ΅ν•˜λ‹€ μƒκ°ν•΄λ³΄λ‹ˆ 제일 μ€‘μš”ν•œ hook에 λŒ€ν•΄ 닀루지 μ•Šμ€κ²ƒ κ°™μ•„
λΆ€λž΄λΆ€λž΄ μ •λ¦¬ν•΄μ„œ 올리게 λ˜μ—ˆλ‹€.
이런.. λ¦¬μ•‘νŠΈ ,, ν›… λ„ˆλž€ 녀석..

Hook μ΄λž€?

ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ μƒνƒœ(state), λΆ€μˆ˜ 효과(side effect), 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ 등을 관리할 수 있게 ν•΄μ£ΌλŠ” νŠΉλ³„ν•œ ν•¨μˆ˜μ΄λ©° React 16.8 버전에 λ„μž… λ˜μ—ˆλ‹€.
κΈ°μ‘΄ ν΄λž˜μŠ€ν˜•μ— μžˆλŠ” κΈ°λŠ₯듀을 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—λ„ μ‚¬μš©ν•  수 μžˆλŠ”κ²Œ λ°”λ‘œ Hook!

Hook νŠΉμ§•

1)μƒνƒœ 관리
useStateλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ μƒνƒœλ₯Ό 관리할 수 μžˆλ‹€.

2)λΆ€μˆ˜ 효과 처리
useEffectλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈμ˜ 생λͺ…μ£ΌκΈ° 이벀트(마운트, μ—…λ°μ΄νŠΈ, μ–Έλ§ˆμš΄νŠΈ)에 맞좰 λΆ€μˆ˜ 효과λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.
3)μ»΄ν¬λ„ŒνŠΈ κ°„ 둜직 μž¬μ‚¬μš©
useContext, useReducer, useMemo, useCallbackκ³Ό 같은 Hook을 μ‚¬μš©ν•˜μ—¬ λ‘œμ§μ„ κ΄€λ¦¬ν•˜κ³ , μ»€μŠ€ν…€ Hook을 톡해 λ‘œμ§μ„ μž¬μ‚¬μš©ν•  수 μžˆλ‹€.
그밖에
useCallback, useMemo와 같은 Hook을 μ‚¬μš©ν•˜λ©΄ λΆˆν•„μš”ν•œ λ Œλ”λ§μ„ 방지, μ„±λŠ₯을 μ΅œμ ν™” useMemoλŠ” κ°’ 계산을 μΊμ‹œν•˜κ³ , useCallback은 ν•¨μˆ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μž¬μ‚¬μš© ν•  수 있게 ν•œλ‹€.

μž₯점 3가지

  • κ°„κ²°ν•œ μ½”λ“œ πŸ’¨ κ°„λ‹¨ν•œ ν•¨μˆ˜ν˜• μ½”λ“œ λŒ€μ²΄
  • 둜직 μž¬μ‚¬μš©μ„± πŸ’¨ μ»€μŠ€ν…€μœΌλ‘œ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈ 둜직 μž¬μ‚¬μš©
  • ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ° πŸ’¨ κ°„λ‹¨ν•œ λ°©μ‹μœΌλ‘œ μ½”λ“œ μž‘μ„±

1.useState

μƒνƒœ λ³€μˆ˜μ™€ μƒνƒœ μ—…λ°μ΄νŠΈ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό 관리

const [count, setCount] = useState(0);

count: μƒνƒœ λ³€μˆ˜
setCount: μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜
0: μƒνƒœμ˜ μ΄ˆκΈ°κ°’

μžμ„Έν•œ μ„€λͺ…은 μ—¬κΈ°

2.useEffect

μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λœ 후에 νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있게 함

useEffect(() => {
  // 이곳에 μ‹€ν–‰ν•  μž‘μ—…μ„ μž‘μ„±
  document.title = `You clicked ${count} times`;
}, [count]);
  • useEffectλŠ” λ Œλ”λ§ ν›„λ§ˆλ‹€ μ‹€ν–‰, 두 번째 μΈμžμ— μ „λ‹¬λœ λ°°μ—΄ [count]에 μ§€μ •λœ 값이 변경될 λ•Œλ§Œ μ‹€ν–‰ 예)API호좜, 이벀트 λ¦¬μŠ€λ„ˆ 등둝, λ“±

3.useContext

Context API와 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ 트리 λ‚΄μ—μ„œ 데이터λ₯Ό μ‰½κ²Œ 전달

const value = useContext(MyContext);
  • MyContext: μ „λ‹¬ν•˜κ³  싢은 데이터λ₯Ό ν¬ν•¨ν•˜λŠ” Context 객체

4.useReducer

useState와 λΉ„μŠ·ν•˜μ§€λ§Œ, λ³΅μž‘ν•œ μƒνƒœ μ—…λ°μ΄νŠΈ λ‘œμ§μ„ μ²˜λ¦¬ν•  λ•Œ 유용 useState보닀 κ°•λ ₯ν•œ 관리

const [state, dispatch] = useReducer(reducer, initialState);

5.useCallback

ν•¨μˆ˜κ°€ λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ μƒˆλ‘œ μƒμ„±λ˜λŠ” 것을 λ°©μ§€ν•˜κ³ , μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ νŠΉμ • ν•¨μˆ˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μž¬μ‚¬μš©

const memoizedCallback = useCallback(() => {
  // function body
}, [dependencies]);

6.useMemo

값이 변경될 λ•Œλ§Œ κ³„μ‚°λœ 값을 λ°˜ν™˜ν•˜μ—¬ λΆˆν•„μš”ν•œ λ Œλ”λ§μ„ 방지 useCallback와 λΉ„μŠ·

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

7.useRef

μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ DOM에 μ ‘κ·Όν•˜κ±°λ‚˜, 값이 λ³€κ²½λ˜μ–΄λ„ λ¦¬λ Œλ”λ§λ˜μ§€ μ•ŠλŠ”λ‹€.

const inputRef = useRef(null);

Hook κ·œμΉ™

μ΅œμƒμœ„μ—μ„œ 호좜
μ»΄ν¬λ„ŒνŠΈ ν•¨μˆ˜μ˜ μ΅œμƒμœ„μ—μ„œλ§Œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ‘°κ±΄λ¬Έμ΄λ‚˜ 반볡문 μ•ˆμ—μ„œ 호좜 λΆˆκ°€

React ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œ 호좜
React μ»΄ν¬λ„ŒνŠΈ ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, 일반 JavaScript ν•¨μˆ˜λ‚˜ 클래슀 μ•ˆμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

κ²°λ‘ 

Hook은 Reactμ—μ„œ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λŠ₯을 λŒ€μ²΄ν•˜κ³ , 더 κ°„κ²°ν•˜κ³  효율적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ λ•λŠ” μ€‘μš”ν•œ κΈ°λŠ₯이닀.

profile
ν•  수 μžˆλ‹€!

0개의 λŒ“κΈ€