๐Ÿ”ƒReact Lifecycle (class component)

#๏ธโƒฃReact Lifecycle

React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์—…๋ฐ์ดํŠธ๋  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฑฐ๋  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ๋ จ์˜ ๋‹จ๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ๋ชจ๋“  React ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฑฐ์นœ๋‹ค.

์ƒ์„ฑ(mounting) โ†’ ์—…๋ฐ์ดํŠธ(updating) โ†’ ์ œ๊ฑฐ(unmounting)

  • ์ปดํฌ๋„ŒํŠธ๋Š” ํ™”๋ฉด์— ์ถ”๊ฐ€๋  ๋•Œ ๋งˆ์šดํŠธ๋œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒˆ๋กœ์šด props๋‚˜ state๋ฅผ ๋ฐ›์œผ๋ฉด ์—…๋ฐ์ดํŠธ๋œ๋‹ค. ์ด๋Š” ๋ณดํ†ต ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.

  • ํ™”๋ฉด์—์„œ ์ œ๊ฑฐ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ํ•ด์ œ๋œ๋‹ค.

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ ํŠน์ • ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” Hook์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šคํ˜• component ์˜ lifeCycle์ฒ˜๋Ÿผ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์šฉ์–ด
์„ค๋ช…

~ will

์–ด๋–ค '์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด

~ did

์–ด๋–ค' ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ์ดํ›„'์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด

mount

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ 'DOM์ด ์ƒ์„ฑ'๋˜๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด

update

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ '๋ณ€ํ™”'๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ ex) props, state, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ ๋ Œ๋”๋ง, forceUpdate๋ฅผ ํ†ตํ•ด ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ

unmount

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ 'DOM์ด ์ œ๊ฑฐ'๋˜๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ์‚ฌ๋ผ์ง€๋Š” ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด


#๏ธโƒฃClass Component Lifecycle

1. Mounting

โ–ธconstructor()

์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๋กœ๋“œ๊ฐ€ ๋œ ์ดํ›„ ๋ Œ๋”๋ง๋˜๊ธฐ ์ด์ „์— '๋ฐ์ดํ„ฐ *๋ฐ”์ธ๋”ฉ', '์ดˆ๊ธฐํ™”'๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜. ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ state๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์ด ์—†๋‹ค๋ฉด, ํ•ด๋‹น React ์ปดํฌ๋„ŒํŠธ์—๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

*๋ฐ”์ธ๋”ฉ : ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค(๋˜๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ํ‘œํ˜„)๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•˜๊ณ  ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ์ˆ . react์—์„œ๋Š” ๋ถ€๋ชจ โ†’ ์ž์‹ ๋‹จ๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

โ–ธrender()

๋ฏธ๋ฆฌ ๊ตฌํ˜„๋œ HTML์„ ํ™”๋ฉด์ƒ์— ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •(๋ Œ๋”๋ง)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„๋˜์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ๋ฉ”์„œ๋“œ์ด๋ฉฐ React.Component์˜ ํ•˜์œ„ class์—์„œ ๋ฐ˜๋“œ์‹œ ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

  • ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋ฐ›์€ 'props ๊ฐ’์˜ ์ ‘๊ทผ'์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • constructor()์—์„œ ์ •์˜ํ•œ 'state ๊ฐ’์˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ํ•ด๋‹น ๊ณต๊ฐ„์—์„œ๋Š” setState()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

โ–ธcomponentDidMount()

ํ™”๋ฉด์ด ๋ Œ๋”๋ง ๋œ ์ดํ›„์— ํ•ด๋‹น '์ปดํฌ๋„ŒํŠธ๋ฅผ DOM ํŠธ๋ฆฌ์— ์‚ฝ์ž…'(๋งˆ์šดํŠธ)์ด ๋˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ๋“ฑ๋ก์— ์‚ฌ์šฉ

  • setTimeout, setInterval, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ

2. Updating

โ–ธcomponentDidUpdate(prevProps, prevState, snapshot)

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ '๋ณ€ํ™”'๊ฐ€ ๋ฐœ์ƒ๋œ ์ดํ›„ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

DidMount()๊ฐ€ ์ฒซ ๋ Œ๋”๋ง ํ›„์— ํ˜ธ์ถœ ๋˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด, DidUpdate()๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  1. props์˜ ๋ณ€๊ฒฝ : ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ props ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ

  2. state์˜ ๋ณ€๊ฒฝ : ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ state์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ

  3. forceUpdate() ์ˆ˜ํ–‰: ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ

3. Unmounting

โ–ธcomponentWillUnmount()

์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ (๋”๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ) 1. ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜๋Š” ๊ฒฝ์šฐ 2. ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฒฝ์šฐ 3. ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ทจ์†Œํ•˜๋Š” ๋“ฑ์˜ ํด๋ฆฐ์—… ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ

import React from "react";

// ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ
class LifecycleClassComponent extends React.Component {
  // constructor: ์ƒ์„ฑ์ž ํ•จ์ˆ˜ - ์ดˆ๊ธฐ๊ฐ’์˜ ์„ค์ •
  constructor(props) {
    super(props);
    this.state = {my_name: "Wynter24",};
    console.log("in constructor!");
  }

  changeMyName = () => {
    //state๊ฐ’ ๋ณ€๊ฒฝ 
    this.setState({ cat_name: "Amanda" });
    console.log("์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค!");
  };

  //componentDidMount() 
  componentDidMount() {
    console.log("ํ™”๋ฉด์ด ๋ Œ๋”๋ง ๋œ ์ดํ›„์— ๋ฐ”๋กœ ์ˆ˜ํ–‰์ด ๋จ: componentDidMount()");
  }

  //componentDidUpdate
  // ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๊ฒฝ์šฐ์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  // prevProps : ์ด์ „ Props์˜ ๊ฐ’
  //  prevState : ์ด์ „ State์˜ ๊ฐ’
  componentDidUpdate(prevProps, prevState) {
    console.log(prevProps, prevState);
    console.log("in componentDidUpdate!");
  }

  // componentWillUnmount
  componentWillUnmount() {
    console.log("ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
  }

  //render
  render() {
    console.log("in render!");
    return (
      <div>
        <h1>์ œ ์ด๋ฆ„์€ {this.state.my_name}์ž…๋‹ˆ๋‹ค.</h1>
        <button onClick={this.changeMyName}>๋‚ด ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ</button>
      </div>
    );
  }
}

export default LifecycleClassComponent;
```

๐Ÿ‘๐ŸปClass Component Lifecycle ์žฅ์ 

๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ(๋ฆฌ ๋ Œ๋”๋ง) ๋ฐฉ์ง€

  • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” shouldComponentUpdate ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

  • ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋ฆฌ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ˆœํ™”๋œ ์ƒํƒœ ๊ด€๋ฆฌ

  • setState๋ฐ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ, ์ƒํƒœ ๊ด€๋ จ ๋ฒ„๊ทธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ ์šฉ์ด์„ฑ

  • componentDidMount, componentDidUpdate ๋“ฑ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„์— ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ์ƒํƒœ ๋˜๋Š” ์†์„ฑ์ด ๋ณ€๊ฒฝ๋œ ํ›„์— ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘Ž๐ŸปClass Component Lifecycle ๋‹จ์ 

์ƒํƒœ ๋ฐ ์†์„ฑ ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ

  • ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์ดํ•ด๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด React Hooks๋‚˜ Redux์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๋น„๋™๊ธฐ ์ฝ”๋“œ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€

  • ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ๊ณผ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

  • ์ด๋Ÿฌํ•œ ์–ด๋ ค์›€์€ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ex. ์—ฌ๋Ÿฌ ๋™์‹œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

๋น„๋™๊ธฐ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ์ฒด๊ณ„์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” React Hooks ๋˜๋Š” ์™ธ๋ถ€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋” ์ž˜ ์ฒ˜๋ฆฌ๋œ๋‹ค.


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

[React] ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ(lifecycle) ์ดํ•ดํ•˜๊ธฐ

The lifecycle of an Effect | Effect์˜ ์ƒ๋ช…์ฃผ๊ธฐ

[React] ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ / ํด๋ž˜์Šคํ˜• , ํ•จ์ˆ˜ํ˜•LifeCycle

What is React Lifecycle - Explain in Detail

Last updated