React

REACT μ»΄ν¬λ„ŒνŠΈ 생λͺ… μ£ΌκΈ° (Life Cycle)

kohi β˜• 2022. 12. 10. 00:54

πŸ‘½ μ»΄ν¬λ„ŒνŠΈ 생λͺ… μ£ΌκΈ° (Life Cycle)


λ¦¬μ•‘νŠΈμ˜ μ»΄ν¬λ„ŒνŠΈλŠ” μƒλͺ… μ£ΌκΈ°λ₯Ό κ°–λŠ”λ‹€. μƒλͺ… μ£ΌκΈ°λž€ μ»΄ν¬λ„ŒνŠΈκ°€ μƒμ„±λ˜κ³ , μ‚¬μš©λ˜κ³ , μ†Œλ©Έλ˜λŠ” μΌλ ¨μ˜ κ³Όμ •μ„ λœ»ν•˜κ³ , μƒλͺ… μ£ΌκΈ° μ•ˆμ—μ„œλŠ” νŠΉμ • μ‹œμ μ— μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œκ°€ μžˆλŠ”데, μ΄λ₯Ό λΌμ΄ν”„ μ‚¬μ΄ν΄ μ΄λ²€νŠΈλΌκ³  ν•œλ‹€.

μ–΄λ–€ λΌμ΄ν”„ μ‚¬μ΄ν΄ μ΄λ²€νŠΈλŠ” ν•œ λ²ˆλ§Œ μ‹€ν–‰λ˜κ³ , μ–΄λ–€ μ΄λ²€νŠΈλŠ” κ³„μ†ν•΄μ„œ μ‹€ν–‰λ˜κΈ°λ„ ν•œλ‹€. λΌμ΄ν”„ μ‚¬μ΄ν΄ λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€.

 

πŸ‘½ 라이프 사이클 이벀트의 λΆ„λ₯˜


 

라이프 사이클 λ©”μ„œλ“œμ˜ μ’…λ₯˜λŠ” 총 9가지이닀.

  • will 접두사가 뢙은 λ©”μ„œλ“œ: μ–΄λ–€ μž‘μ—…μ„ μž‘λ™ν•˜κΈ° μ „ μ‹€ν–‰
  • did μ ‘두사가 λΆ™μ€ λ©”μ„œλ“œ: μ–΄λ–€ μž‘업을 μž‘λ™ν•œ ν›„에 μ‹€ν–‰

 

라이프 μ‚¬μ΄ν΄μ€ 3가지 Mount, Update, Unmount μΉ΄ν…Œκ³ λ¦¬λ‘œ λ‚˜λˆˆλ‹€. 각 λΆ„λ₯˜μ— λ”°λΌ μ΄λ²€νŠΈκ°€ λ°œμƒλ˜λŠ” νšŸμˆ˜κ°€ λ‹€λ₯΄λ‹€.

 

Mount

 

DOM이 μƒμ„±λ˜κ³  μ›Ή λΈŒλΌμš°μ € 상에 λ‚˜νƒ€λ‚˜λŠ” 것을 Mount라고 ν•œλ‹€. ν•œ 번만 μ‹€ν–‰λœλ‹€.

  • constructor: μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒˆλ‘œ λ§Œλ“€ λ•Œλ§ˆλ‹€ ν˜ΈμΆœλ˜λŠ” 클래슀 μƒμ„±μž λ©”μ„œλ“œ
  • getDerivedStateFromProps: props에 μžˆλŠ” 값을 state에 넣을 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œ
  • componentWillMount(): DOM에 μ‚½μž…ν•˜κΈ° 전에 μ‹€ν–‰λœλ‹€. λ§ˆμš΄νŒ… μ€‘μ΄λ―€λ‘œ propsλ‚˜ state에 μ ‘κ·Όν•  μˆ˜λŠ” μžˆμœΌλ‚˜ 이 값을 λ³€κ²½ν•˜λ©΄ μ•ˆ λœλ‹€. λ˜ν•œ 아직 render() ν•¨μˆ˜κ°€ μ‹€ν–‰ 전이기 λ•Œλ¬Έμ— DOM에 μ ‘κ·Όν•  수 μ—†λ‹€.
  • render: μ€€λΉ„ν•œ UI λ Œλ”링
  • componentDidMount(): DOM에 μ‚½μž…λ˜μ–΄ λ Œλ”λ§μ΄ μ™„λ£Œλœ ν›„ μ‹€ν–‰λœλ‹€. DOM에 μ ‘κ·Όν•  수 있으며, 주둜 이 λ‹¨κ³„μ—μ„œ AJAX μš”μ²­μ„ ν•˜κ±°λ‚˜ setTimeout, setInterval 같은 μž‘μ—…μ„ μ‹€ν–‰ν•œλ‹€.

 

Update

μ†μ„±μ΄λ‚˜ μƒνƒœκ°€ λ³€κ²½λ˜μ–΄ React μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ λ°œμƒν•œλ‹€.

  • componentWillReceiveProps(nextProps): μ»΄ν¬λ„ŒνŠΈκ°€ propsλ₯Ό λ°›κΈ° 직전 μ‹€ν–‰λœλ‹€. λ°”λ€” props에 λŒ€ν•œ 정보λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ κ°–λŠ”λ‹€.
  • shouldComponentUpdate(nextProps, nextState): μ»΄ν¬λ„ŒνŠΈ μ—…λ°μ΄νŠΈ 직전에 ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ‘œ, μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§μ„ 해야할지 말아야할지λ₯Ό κ²°μ •ν•œλ‹€. trueλ₯Ό λ°˜ν™˜ν•˜λ©΄ λ‹€μŒ 라이프 사이클 λ©”μ„œλ“œλ₯Ό 계속 μ‹€ν–‰ν•˜κ³ , falseλ₯Ό λ°˜ν™˜ν•˜λ©΄ μž‘μ—…μ„ 쀑지(λ¦¬λ Œλ”λ§ X)ν•œλ‹€.
  • componentWillUpdate(nextProps, nextState): μ»΄ν¬λ„ŒνŠΈ λ³€ν™”λ₯Ό DOM에 λ°˜μ˜ν•˜κΈ° λ°”λ‘œ 직전에 ν˜ΈμΆœν•œλ‹€. 이 λ‹¨κ³„μ—μ„œ stateλ₯Ό λ³€κ²½ν•΄μ„œλŠ” μ•ˆ λœλ‹€. (λ¬΄ν•œ 루프 λ°œμƒ)
  • componentDidUpdate: μ»΄ν¬λ„ŒνŠΈ μ—…λ°μ΄νŠΈ μž‘업이 λ‹€ λλ‚œ ν›„ ν˜ΈμΆœν•œλ‹€. μ΄ λ‹¨κ³„μ—μ„œλŠ” renderκ°€ μ™„λ£Œλ˜μ—ˆμœΌλ―€λ‘œ DOM에 μ ‘κ·Όν•  μˆ˜ μžˆλ‹€.

 

Unmount

 

React μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό DOMμ—μ„œ μ œκ±°ν•  λ•Œ λ°œμƒν•˜λ©° ν•œ λ²ˆλ§Œ μ‹€ν–‰λœλ‹€.

  • componentWillUnmount(): μ»΄ν¬λ„ŒνŠΈλ₯Ό DOMμ—μ„œ μ œκ±°ν•˜κΈ° 전에 μ‹€ν–‰λ˜λ©°, 주둜 μ—°κ²°ν–ˆλ˜ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ œκ±°ν•˜λŠ” λ“±μ˜ μ—¬λŸ¬ 정리 μž‘μ—…μ„ ν•œλ‹€.

 

 

πŸ‘½ 생λͺ… μ£ΌκΈ° 이벀트 예제 μ½”λ“œ


const root = ReactDOM.createRoot(document.getElementById('root'));
  
function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  root.render(element);
}

setInterval(tick, 1000);

 

tick μ»΄ν¬λ„ŒνŠΈλŠ” μ‹œκ°„μ΄ λ³€ν•˜λŠ” 것을 1000msλ§ˆλ‹€ μ—…λ°μ΄νŠΈν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€. λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ— 맞게 μ½”λ“œλ₯Ό μˆ˜μ •ν•œλ‹€.

  • μ»΄ν¬λ„ŒνŠΈλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ μΊ‘μŠν™”
  • μ»΄ν¬λ„ŒνŠΈ μŠ€μŠ€λ‘œ νƒ€μ΄λ¨Έ μ„€μ •ν•˜κ³  μ—…λ°μ΄νŠΈ

 

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }
  
    componentWillUnmount() {
    clearInterval(this.timerID);
  }

 

tick()이 μ²˜μŒ DOM에 λ Œλ”링 λ  λ•Œλ§ˆλ‹€ νƒ€μ΄λ¨Έλ₯Ό μ„€μ •ν•˜κ³ , λ˜ tick()에 μ˜ν•΄ μƒμ„±λœ DOM이 μ‚­μ œλ  λ•Œλ§ˆλ‹€ νƒ€μ΄λ¨Έλ₯Ό ν•΄μ œν•˜κΈ° μœ„ν•΄ componentDidMount() λ©”μ„œλ“œμ™€ componentWillUnmount() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);

 

 

πŸ‘½ Reference


https://velog.io/@gyumin_2/React.js-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0Life-Cycle

 

React.js - μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ°(Life Cycle)

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ°(Life Cycle) λ¦¬μ•‘νŠΈμ˜ μ»΄ν¬λ„ŒνŠΈλŠ” 생λͺ…μ£ΌκΈ°λ₯Ό 가진닀. 생λͺ…μ£ΌκΈ°λž€ μ»΄ν¬λ„ŒνŠΈκ°€ μƒμ„±λ˜κ³  μ‚¬μš©λ˜κ³  μ†Œλ©Έλ  λ•Œ κΉŒμ§€ 일련의 과정을 λ§ν•œλ‹€. 생λͺ…μ£ΌκΈ° μ•ˆμ—μ„œλŠ” νŠΉμ • μ‹œμ μ—

velog.io

https://ko.reactjs.org/docs/state-and-lifecycle.html

 

State and Lifecycle – React

A JavaScript library for building user interfaces

ko.reactjs.org

https://velog.io/@youngminss/React-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-%EB%A9%94%EC%84%9C%EB%93%9C

 

[React] μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμ—λŠ” 라이프사이클(수λͺ… μ£ΌκΈ°)이 μ‘΄μž¬ν•œλ‹€.μ»΄ν¬λ„ŒνŠΈμ˜ 수λͺ…은 νŽ˜μ΄μ§€μ— λ Œλ”λ§λ˜κΈ° 전인 μ€€λΉ„κ³Όμ •μ—μ„œ μ‹œμž‘ν•˜μ—¬ νŽ˜μ΄μ§€μ—μ„œ μ‚¬λΌμ§ˆ λ•Œλλ‚œλ‹€.μ»΄ν¬λ„ŒνŠΈλ₯Ό 처음으둜 λ Œλ”λ§ ν• 

velog.io