Life Cycle

1. ์ƒ๋ช…์ฃผ๊ธฐ (Life Cycle)?

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๊ธฐ๊นŒ์ง€, ์ฆ‰ ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

  • ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€, ๋ฉ”์„œ๋“œ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ๋˜๋Š”๋ฐ ์ด๊ฒƒ์„ ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์„œ๋“œ ๋ผ๊ณ  ํ•œ๋‹ค.

  • ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ๋งˆ์šดํŠธ, ์—…๋ฐ์ดํŠธ, ์–ธ๋งˆ์šดํŠธ ์ด๋‹ค.

1 - 1. ๋งˆ์šดํŠธ

๋งˆ์šดํŠธ๋ž€, DOM์ด ์ƒ์„ฑ๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ณผ์ •์ด๋‹ค

  • constructor

    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ (๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.)

      • ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ state๋‚˜ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

    constructor(props){}
  • getDerivedStateFromProps

    • ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ๋ฐ›์•„์˜จ ๊ฐ’์„ state์— ๋„ฃ์„๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ.

    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค. (๋ฆฌ๋ Œ๋”๋ง๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)

    getDerivedStateFromProps(props, state){}
  • render

    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ.

      • ๋ฉ”์„œ๋“œ ๋’ค ์ค‘๊ด„ํ˜ธ์•ˆ์— ์žˆ๋Š” JSX๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

    render (){JSX}
  • componentDidMount

    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒซ ๋ Œ๋”๋ง์„ ๋งˆ์นœ ๋’ค์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ.

    • ํ˜ธ์ถœ์‹œ์ ์— ์ปดํฌ๋„ŒํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜ ์žˆ๋‹ค.

      • axios, fetch ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ์š”์ฒญํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

    componentDidMount(){}

1 - 2. ์—…๋ฐ์ดํŠธ

์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„๋•Œ ์‹ค์‹œํ•œ๋‹ค. (4๊ฐ€์ง€์˜ ๊ฒฝ์šฐ ์กด์žฌ) ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑฐ์นœ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ.

  • getDerivedStateFromProps

    • ์ปดํฌ๋„ŒํŠธ์˜ props, state์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์„๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

    • ๋งˆ์šดํŠธ ๊ณผ์ •์—์„œ ์‹คํ–‰๋œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

    getDerivedStateFromProps(props, state) {}
  • shouldComponentUpdate

    • ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ.

    • ๋ฐ˜ํ™˜๊ฐ’์ด boolean์ด๊ณ , ์ด ๊ฐ’์— ๋”ฐ๋ผ ๋ฆฌ๋ Œ๋”๋ง์„ ๊ฒฐ์ •ํ•œ๋‹ค.

    shouldComponentUpdate(nextProps, nextState) {}
  • render

    • ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋งˆ์šดํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ.

  • getSnapshotBeforeUpdate

    • ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง ์ง์ „์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ.

    • ๋ Œ๋”๋ง ์ง์ „์˜ ๋ Œ๋”๋ง ์š”์†Œ ํฌ๊ธฐ๋‚˜ ์Šคํฌ๋กค ์œ„์น˜๋“ฑ์˜ DOM์˜ ์ •๋ณด์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

    getSnapshotBeforeUpdate(preProps, preState) {}
  • componentDidMount

    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ ๊ณผ์ •์„ ๋งˆ์นœ ํ›„์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ.

    • 3๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ snapshot์€ getSnapshotBeforeUpdate ๋ฉ”์„œ๋“œ๋กœ ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ DOM ์ •๋ณด์ด๋‹ค.

    componentDidUpdate(preProps, preState, snapshot) {}

1 - 3. ์–ธ๋งˆ์šดํŠธ

DOM์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •.

  • componentWillUnmount

    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ.

    • DOM์— ์ง์ ‘ ๋“ฑ๋กํ–ˆ๋˜ ์ด๋ฒคํŠธ๋“ค์„ ์ œ๊ฑฐํ•œ๋‹ค.

    componentWillUnmount() {}

2. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์™€ ๊ณผ์ •์€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ์ด๊ณ , ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์€ ๊ฐ™์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

2 - 1. ๋งˆ์šดํŠธ

  • constructor, getDerivedStateFromProps

    • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ constuctor ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • useState๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ state๋ฅผ ์„ ์–ธํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋  ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

  • render

    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ return ๋ถ€๋ถ„์ด ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • return์•ˆ์— ์ž‘์„ฑ๋œ JSX๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง ํ•œ๋‹ค.

    • ์œ„์˜ constructor ๋ถ€๋ถ„์—์„œ ์„ ์–ธํ•œ state๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

      • ํ•˜์ง€๋งŒ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” setState ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • componentDidMount

    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ด ๊ธฐ๋Šฅ์€ useEffect๋ฅผ ํ†ตํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

    • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ดํ›„ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ

  import React, {useState, useEffect} from "react";

  function App(){
    /**
     * ์ปดํฌ๋„ŒํŠธ ํ˜ธ์ถœ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ์ด ๋˜๋Š” ๊ณต๊ฐ„
     * ์ด ๊ณต๊ฐ„์—์„œ state, ์ปดํฌ๋„ŒํŠธ ๋ฉ”์„œ๋“œ๋“ค์„ ์„ ์–ธํ•œ๋‹ค.
     */
      const name = "ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ";
      const [age, setAge] = useState(20);

      useEffect(() => {
      	console.log("๋ Œ๋”๋ง ์ดํ›„ ์ˆ˜ํ–‰๋œ๋‹ค.");
      }, [])

      return (
          <div>
              <p>{name}</p>
              <p>{age}</p>
          </div>
      )
  }
export default App;

2 - 2. ์—…๋ฐ์ดํŠธ

  • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ๊ณผ์ •

    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” useEffect๋ฅผ ํ†ตํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๊ณผ์ •์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค.

      • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ ์‹คํ–‰๋œ๋‹ค.

      • props, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง, ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ state์˜ ๋ณ€ํ™” ๊ฐ€ ์ผ์–ด๋‚ฌ์„๋•Œ ์‹คํ–‰๋œ๋‹ค.

  import React, {useState, useEffect} from "react";

  function App(props){
      const [info, setInfo] = useState(
      	{
        	name : "์—…๋ฐ์ดํŠธ ๊ณผ์ •",
            age : 20,
            isOperate : false
        }
      );

      useEffect(() => {
      	console.log("์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ props.data, info.name์ด ๋ณ€๊ฒฝ๋ ๋•Œ ๋ฆฌ๋ Œ๋”๋ง๋˜๋ฉฐ ์ˆ˜ํ–‰๋œ๋‹ค.");
      }, [props.data, info.name])

      return (
          <div>
          </div>
      )
  }
export default App;

2 - 3. ์–ธ๋งˆ์šดํŠธ

  • componentWillUnmount

    • ์—…๋ฐ์ดํŠธ ๊ณผ์ •๊ณผ ๋™์ผํ•˜๊ฒŒ useEffect ๋ฉ”์„œ๋“œ๊ฐ€ ๋Œ€์‹ ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.

App.js

  import React, {useState, useEffect} from "react";
  import unmountComponent from "./unmountComponent";

  function App(props){

      const [unmountState, setUnmountState] = useState(true);

      const unmount = () => {
      	setUnmountState(!unmountState);
      };

      return (
          <div>
          	<button onClick = {unmount}>์ œ๊ฑฐ</button>
            {
            	unmountState && (
                	<unmountComponent />
                )
            }
          </div>
      )
  }
export default App;
unmountComponent.js

import React, {useState, useEffect} from "react";

function unmountComponent(){
	useEffect(() => {
    	return () => {
        	console.log("์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ");
        }
    }, [])
	return (
    	<div>์–ธ๋งˆ์šดํŠธ ์ปดํฌ๋„ŒํŠธ</div>
    )
}
  • ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” unmountComponent๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์™€ App์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ์ค‘์ด๋‹ค.

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

3. ์š”์•ฝ

ํด๋ž˜์Šคํ˜•
ํ•จ์ˆ˜ํ˜•

ํŠน์ง•

render ๋ฉ”์„œ๋“œ์™€ Component ์ƒ์† ํ•„์ˆ˜

React Hook ์‚ฌ์šฉ, ๊ฐ„๋‹จํ•œ Component ์„ ์–ธ

๋‹จ์ 

๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ, state, props ์‚ฌ์šฉ์ด ๋ถˆํŽธ

useState, useEffect์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ state, ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

Last updated