λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»WEB FrontEnd/ν”„λ ˆμž„μ›Œν¬ React

μ»΄ν¬λ„ŒνŠΈμ˜ Lifecycle

μ»΄ν¬λ„ŒνŠΈμ˜ Lifecycle

μ»΄ν¬λ„ŒνŠΈκ°€ μ‹€ν–‰λ˜κ³  μ’…λ£Œλ˜λŠ” 과정을 νŠΉμ • μ‹œμ λ³„λ‘œ λ‚˜λˆ„μ–΄ λ‘” 것

μ»΄ν¬λ„ŒνŠΈλŠ”

1. 생성이 될 μˆ˜λ„ 있고 (mount)

2. μž¬λ Œλ”λ§μ΄ 될 μˆ˜λ„ 있고 (update)

3. μ‚­μ œκ°€ 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. (unmount)

 

 

Lifecycle Hook

  • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λŠ₯(React State, Lifecycle Method)을 μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ£ΌλŠ” κΈ°λŠ₯이닀.
  • Hook은 λͺ¨λ‘ use둜 μ‹œμž‘ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.
  • μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μž¬μ‚¬μš© 될 수 μžˆλŠ” 둜직이라면 μ‚¬μš©μžκ°€ μ •μ˜ν•΄μ„œ λ§Œλ“€ 수 μžˆλ‹€. => custom hooks

 

1) ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ Lifecycle Hook

class Detail2 extends React.Component {
  componentDidMount(){
    //Detail2 μ»΄ν¬λ„ŒνŠΈκ°€ λ‘œλ“œλ˜κ³ λ‚˜μ„œ μ‹€ν–‰ν•  μ½”λ“œ
  }
  componentDidUpdate(){
    //Detail2 μ»΄ν¬λ„ŒνŠΈκ°€ μ—…λ°μ΄νŠΈ λ˜κ³ λ‚˜μ„œ μ‹€ν–‰ν•  μ½”λ“œ
  }
  componentWillUnmount(){
    //Detail2 μ»΄ν¬λ„ŒνŠΈκ°€ μ‚­μ œλ˜κΈ°μ „μ— μ‹€ν–‰ν•  μ½”λ“œ
  }
}

 

2) ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ Lifecycle Hook

- useEffect() : mount, updateμ‹œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

- useEffect λ°”κΉ₯에 적어도 λ˜‘κ°™μ΄ μ»΄ν¬λ„ŒνŠΈ mount & updateμ‹œ μ‹€ν–‰λ˜κΈ΄ ν•˜μ§€λ§Œ, useEffect μ•ˆμ— 적은 μ½”λ“œλŠ” html λ Œλ”λ§ 이후에 λ™μž‘ν•œλ‹€.

=> useEffectμ•ˆμ—λŠ” μ–΄λ €μš΄ μ—°μ‚°μ΄λ‚˜, μ„œλ²„μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” μž‘μ—…, 타이머 μž₯μ°©ν•  λ•Œ μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.

import {useState, useEffect} from 'react';

function Detail(){

  useEffect(()=>{
    //여기적은 μ½”λ“œλŠ” μ»΄ν¬λ„ŒνŠΈ λ‘œλ“œ & μ—…λ°μ΄νŠΈ λ§ˆλ‹€ 싀행됨
    console.log('μ•ˆλ…•')
  });
  
  return (μƒλž΅)
}

- [싀행쑰건]을 따라 μ„€μ •ν•˜λ©΄ κ·Έ 싀행쑰건이 λ‘œλ“œ&μ—…λ°μ΄νŠΈ 될 λ•Œλ§ˆλ‹€ useEffectκ°€ μ‹€ν–‰λœλ‹€.

useEffect(()=>{
	console.log('μ•ˆλ…•')
}, [싀행쑰건]);

- useEffect λ™μž‘ 전에 μ‹€ν–‰ν•˜λŠ” return () => {}

useEffect(()=>{ 
  κ·Έ λ‹€μŒ 싀행됨 
  return ()=>{
    μ—¬κΈ°μžˆλŠ”κ²Œ 먼저싀행됨
  }
}, [count])