Component Lifecycle - MoonGyeongHyeon/React_Study GitHub Wiki

React - Component Lifecycle

์˜ˆ์ œ(1,2)์—์„œ Component Lifecycle์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ์— ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

Component ์ƒ์„ฑ

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ constructor -> componentWillMount -> render -> componentDidMount ์ˆœ์œผ๋กœ ํ˜ธ์ถœ์ด ๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ์—” componentWillUnmount ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

props, state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ

์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ componentWillReceiveProps -> shouldComponentUpdate -> componentWillUpdate-> render -> componentDidUpdate ์ˆœ์œผ๋กœ ํ˜ธ์ถœ์ด ๋œ๋‹ค. state์˜ ๊ฒฝ์šฐ, shouldComponentUpdate ๋ถ€ํ„ฐ ํ˜ธ์ถœ์ด ๋œ๋‹ค.

์ „์ฒด ๊ณผ์ •

๊ฐ ๋ฉ”์†Œ๋“œ ์„ค๋ช…

  • constructor

    constructor(props){
        super(props);
        console.log("constructor");
    }
    

    ์ƒ์„ฑ์ž๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. ๊ธฐ๋ณธ state๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

    โ€‹

  • componentWillMount

    componentWillMount(){
        console.log("componentWillMount");
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM ์œ„์— ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค.

    โ€‹

  • render

    ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์„ ๋‹ด๋‹นํ•œ๋‹ค.

    โ€‹

  • componentDidMount

    componentDidMount(){
        console.log("componentDidMount");
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค ๋งŒ๋“ค์–ด์ง€๊ณ  ์ฒซ ๋ Œ๋”๋ง๊นŒ์ง€ ๋๋‚œ ํ›„ ํ˜ธ์ถœ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ Javascript ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์—ฐ๋™ํ•˜๊ฑฐ๋‚˜ setTimeout, setInterval ๋ฐ AJAX ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    โ€‹

  • componentWillRecevieProps

    componentWillReceiveProps(nextProps){
        console.log("componentWillReceiveProps: " + JSON.stringify(nextProps));
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒˆ๋กœ์šด props๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. props์— ๋”ฐ๋ผ state๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค. ํ˜„์žฌprops ( this.props ) ์™€ ๋‹ค์Œ props ( nextProps ) ๋ฅผ ์ ์ ˆํžˆ ์ด์šฉํ•˜๋„๋ก ํ•˜์ž. ์ด ์•ˆ์—์„œ this.setState ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์ถ”๊ฐ€์ ์ธ ๋ Œ๋”๋ง์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    โ€‹

  • shouldComponentUpdate

    shouldComponentUpdate(nextProps, nextState){
        console.log("shouldComponentUpdate: " + JSON.stringify(nextProps) + " " + JSON.stringify(nextState));
        return true;
    }
    

    props ๋˜๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ, ๋ฆฌ๋ Œ๋”๋ง ํ• ์ง€ ๋ง์ง€๋ฅผ ์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

    return nextProps.id !== this.props.id; ์ฒ˜๋Ÿผ ํŠน์ • ํ•„๋“œ๋งŒ์„ ๋น„๊ต/ํ™•์ธ ํ• ์ˆ˜๋„ ์žˆ๊ณ , JSON.stringify() ๋ฅผ ์จ์„œ ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ๋น„๊ต ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ฐธ๊ณ ๋กœ, React ๊ณต์‹ ๋ฌธ์„œ์—์„  JSON.stringify() ๋ฅผ ํ†ตํ•œ ๋น„๊ต๋Š” ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๊ณ  ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ๋ผ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

    โ€‹

  • componentWillUpdate

    componentWillUpdate(nextProps, nextState){
        console.log("componentWillUpdate: " + JSON.stringify(nextProps) + " " + JSON.stringify(nextState));
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ this.setState ๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ฒŒ ๋˜๋‹ˆ ์ฃผ์˜ํ•˜๋„๋ก ํ•˜์ž.

    โ€‹

  • componentDidUpdate

    componentDidUpdate(prevProps, prevState){
        console.log("componentDidUpdate: " + JSON.stringify(prevProps) + " " + JSON.stringify(prevState));
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง์„ ๋งˆ์นœ ํ›„ ํ˜ธ์ถœ๋œ๋‹ค.

    โ€‹

  • componentWillUnmount

    componentWillUnmount(){
        console.log("componentWillUnmount");
    }
    

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์‚ฌ๋ผ์ง„ ํ›„ ํ˜ธ์ถœ๋œ๋‹ค.