๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/React

[React] useEffect ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

by Connecting-the-dots 2022. 3. 25.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

๐Ÿ’œ warnig ํ•ด๊ฒฐํ•˜๊ธฐ

๐Ÿค <a> cannot appear as a descendant of <a>

  • ์ง€๋‚œ ๋ฒˆ Router ์ˆ˜์—…์ด ์ง€๋‚œ ํ›„๋ถ€ํ„ฐ ์œ„์™€ ๊ฐ™์ด "a ํƒœ๊ทธ ์•ˆ์— a ํƒœ๊ทธ๋ฅผ ๋„ฃ์œผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค." ๋ผ๋Š” ๋‚ด์šฉ์˜ warning ์ด ๋œจ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
<Nav.Link><Link to="/">Home</Link></Nav.Link>
  • ์•Œ๊ณ ๋ณด๋‹ˆ Bootstrap ์„ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ํ–ˆ๋˜ ๋ถ€๋ถ„์ธ <Nav.Link></Nav.Link> ํƒœ๊ทธ ์•ˆ์— <Link></Link> ํƒœ๊ทธ๋ฅผ ๋„ฃ์€ ๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค.
  • ์ด ๋‘ ๊ฐœ์˜ ํƒœ๊ทธ๋Š” ๋ชจ๋‘ <a> ํƒœ๊ทธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งํฌ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํƒœ๊ทธ์—ฌ์„œ ์œ„์™€ ๊ฐ™์€ warning ์ด ๋–ด๋˜ ๊ฒƒ์ด๋‹ค.
<Nav.Link as={Link} to='/'>Home</Nav.Link>
  • ๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.
  • as ๋ผ๋Š” ์†์„ฑ์€ React Bootstrap ๋ฌธ๋ฒ•์ธ๋ฐ ๊ทธ๋ƒฅ ๊ธฐ๋ณธ <a> ํƒœ๊ทธ ๋Œ€์‹  ์‚ฌ์šฉํ•  html ํƒœ๊ทธ ํ˜น์€ Component ๋ฅผ ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ <Link> ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ์ด์ œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ, ๊ธฐ์กด์— ๋œจ๋˜ warning ์ด ๋”์ด์ƒ ๋œจ์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’œ Component ์˜ Lifecycle ๊ณผ Hook ์‚ดํŽด๋ณด๊ธฐ

๐Ÿค Lifecycle ์‚ดํŽด๋ณด๊ธฐ

  • Component ์—๋Š” Lifecycle ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Component ๋Š” ์ƒ์„ฑ์ด ๋  ์ˆ˜๋„, ์‚ญ์ œ๊ฐ€ ๋  ์ˆ˜๋„, ๊ด€๋ จ๋œ state ์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ์žฌ๋ Œ๋”๋ง์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. 

๐Ÿค Hook ์‚ดํŽด๋ณด๊ธฐ

  • ํŠน์ • Component ์˜ Lifecycle ์ค‘๊ฐ„์ค‘๊ฐ„์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์„ ๊ฐˆ๊ณ ๋ฆฌ์ฒ˜๋Ÿผ ๊ทธ ์‹œ์ ์— ๋ธŒ๋ ˆ์ดํฌ๋ฅผ ๊ฑด๋‹ค๊ณ  ํ•˜์—ฌ ๊ฐˆ๊ณ ๋ฆฌ๋ผ๋Š” ์˜๋ฏธ์˜ Hook ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ทธ๋ž˜์„œ Component ์ƒ์„ฑ ์ „์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด๋‹ฌ๋ผ๋“ ์ง€, Component ๊ฐ€ ์‚ญ์ œ๋˜๊ธฐ ์ „์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด๋‹ฌ๋ผ๋“ ์ง€ ๋“ฑ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ Hook ์ด๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Hook ์˜ ์ •ํ™•ํ•œ ๋ช…์นญ์€ Lifecycle Hook ์ด๋‹ค.

๐Ÿ’œ Lifecycle Hook ์•Œ์•„๋ณด๊ธฐ

  • Hook ๋“ค์€ ์›๋ž˜ class ๋กœ ๋งŒ๋“  Component ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
class Detail2 extends React.Component {
  componentDidMount(){
    // Detail2 Component ๊ฐ€ Mount(์ƒ์„ฑ) ๋˜๊ณ  ๋‚˜์„œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
  }
  componentWillUnmount(){
    // Detail2 Component ๊ฐ€ Unmount(์‚ญ์ œ) ๋˜๊ธฐ ์ „์— ์‹คํ–‰ํ•  ์ฝ”๋“œ
  }
}
  • ๊ฐ€์žฅ ์œ ์šฉํ•œ Hook ์„ 2๊ฐœ ๊ผฝ์œผ๋ผ๋ฉด ์œ„์— ์ž‘์„ฑํ•œ 2๊ฐœ์˜ ์ฝ”๋“œ์ด๋‹ค.
  • componentDidMount() ์—๋Š” Component ๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ƒ์„ฑ๋œ ํ›„ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  • componentWillUnmount() ์—๋Š” Component ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’œ useEffect Hook ์•Œ์•„๋ณด๊ธฐ

  • ์š”์ฆ˜ React ๊ฐœ๋ฐœ์—์„œ๋Š” ๋” ์งง๊ณ  ์‰ฝ๋‹ค๋Š” ์žฅ์ ๋•Œ๋ฌธ์— useEffect ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
import React, {useState, useEffect} from 'react';

function Detail(){

  useEffect(()=>{
    // ์—ฌ๊ธฐ์— ์ฝ”๋“œ ์ž‘์„ฑ
  });
  
  return (
  // HTML ํƒœ๊ทธ๋“ค ์ž‘์„ฑํ•˜๋Š” ์œ„์น˜
  )
}
  • ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๊ฐ™์ด function Component ์•ˆ์—์„œ return ์ด ๋‚˜์˜ค๊ธฐ ์ „์— useEffect() ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ๋ฏธ๋ฆฌ useEffect ๋ฅผ import ํ•œ๋‹ค.
    • useEffect() ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • useEffect() ์•ˆ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • ์ฝœ๋ฐฑํ•จ์ˆ˜ ์•ˆ์— Detail Component ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์— ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • useEffect() ๋‚ด์˜ ์ฝ”๋“œ ์‹คํ–‰ ์กฐ๊ฑด์„ ์ž์„ธํ•˜๊ฒŒ ๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • Component ์˜ mount ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ (Component ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋กœ๋”ฉ๊นŒ์ง€ ๋๋‚ฌ์„ ๋•Œ)
    • Component ๊ฐ€ update ๋˜๊ณ  ๋‚œ ํ›„์— (Component ๊ฐ€ ์žฌ๋ Œ๋”๋ง ๋˜๊ณ  ๋‚œ ํ›„์—)

 

728x90
๋ฐ˜์‘ํ˜•