πŸ” λ¦¬μ•‘νŠΈ Hooks

  • λ¦¬μ•‘νŠΈμ—μ„œ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·Έ 쀑에 HooksλŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
  • HooksλŠ” 기쑴에 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν•  수 μ—†μ—ˆλ˜ μƒνƒœ κ΄€λ¦¬λ‚˜, λ Œλ”λ§ ν›„ μž‘μ—…μ„ μ„€μ •ν•˜λŠ” κΈ°λŠ₯ λ“±μ˜ μž‘μ—…μ„ ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

useEffect

useEffect λŠ” λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆλŠ” Hook μž…λ‹ˆλ‹€. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ componentDidMount와 componentDidUpdateλ₯Ό ν•©μΉœ ν˜•νƒœλ‘œ 보아도 λ¬΄λ°©ν•©λ‹ˆλ‹€.

useEffect도 μ‚¬μš©ν•˜λ €λ©΄ importκ°€ ν•„μˆ˜μž…λ‹ˆλ‹€.

useEffect(() => {
  console.log("λ Œλ”λ§ μ™„λ£Œ");
  console.log({
    name,
    nickname,
  });
});

개발자 도ꡬλ₯Ό 확인할 경우, input λž€μ— 무언가 값을 μž…λ ₯ν•  λ•Œλ§ˆλ‹€ λ¦¬λ Œλ”λ§ 되고 μ½˜μ†”μ—λŠ” λ°”λ€ŒλŠ” nameμ΄λ‚˜ nickname 값이 좜λ ₯될 κ²ƒμž…λ‹ˆλ‹€.

  • useEffectμ—μ„œ μ„€μ •ν•œ ν•¨μˆ˜ λ‚΄μš©μ„, μ»΄ν¬λ„ŒνŠΈκ°€ 화면에 맨 처음 λ¦¬λ Œλ”λ§ λ λ•Œλ§Œ(마운트될 λ•Œ) μ‹€ν–‰ν•˜κ³  μ—…λ°μ΄νŠΈ 될 λ•ŒλŠ” μ‹€ν–‰ν•˜μ§€ μ•Šκ²Œ ν•  경우 두 번째 μΈμžμ— λΉ„μ–΄μžˆλŠ” 배열인 []
useEffect(() => {
  console.log("λ Œλ”λ§ μ™„λ£Œ. 마운트될 λ•Œλ§Œ μ‹€ν–‰");
}, []);
  • λ°˜λŒ€λ‘œ νŠΉμ • state 값이 λ³€ν•  λ•Œλ§ˆλ‹€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ €λ©΄ 두 번째 μΈμžμ— [μƒνƒœλͺ…]으둜 μž…λ ₯ν•˜μ—¬ λ„£μœΌλ©΄ λ©λ‹ˆλ‹€.
  • μ•„λž˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ name을 input에 μž…λ ₯ν•  λ•Œλ§ˆλ‹€ name 값이 λ°”λ€Œκ³  μ½˜μ†”μ— λ‘œκ·Έκ°€ 찍힐 κ²ƒμž…λ‹ˆλ‹€.
useEffect(() => {
  console.log(name);
}, [name]);
  • 이처럼 useEffect ν•¨μˆ˜μ˜ 두 번째 νŒŒλΌλ―Έν„° 배열에 μ–΄λ–€ 것을 λ„£λŠλƒμ— 따라 μ‹€ν–‰λ˜λŠ” 쑰건이 λ‹¬λΌμ§‘λ‹ˆλ‹€.

이 글은 κΉ€λ―Όμ€€(velopert)λ‹˜μ˜ λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” κΈ°μˆ μ„μ°Έμ‘° ν•˜μ—¬ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€.