Frontend/React

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ - ์—…๋ฐ์ดํŠธ ๋‹จ๊ณ„ (Updating)

์ด์ œํฌ 2023. 12. 1. 18:00


  • static getDerivedStateFromProps()
    • props๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™” ํ•˜๊ณ ์ž ํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • ๋งˆ์šดํŠธ ์ดํ›„์—๋„ props๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.
  • shouldComponentUpdate()
    • ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜
    • ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ(๋ Œ๋”๋ง) ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • render()
    • ์ปดํฌ๋„ŒํŠธ UI ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • getSnapshotBeforeUpdate()
    • ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜
    • ์ตœ๊ทผ์— ๋ Œ๋”๋ง ๋œ ๊ฒฐ๊ณผ๊ฐ€ DOM์— ๋ฐ˜์˜๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋‹ค.
  • componentDidUpdate()
    • ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜
    • ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋‹ค.

import React, { Component } from 'React'

class MyComponent extends Component {
    constructor(props) {
        super(props);
     	// ์ดˆ๊ธฐ ์ƒํƒœ ์„ค์ •
        this.state = { 
            count : 0,
        };
    }
    
    shouldComponentUpdate(nextProps, nextState) {
      // ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€๋ฅผ boolean ํƒ€์ž…์œผ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
      return nextState.count !== this.state.count;
    }
    
    render() {
        return (
            <div>
            	<p>{this.state.count}</p>
            </div>
        );
    }
    
    getSnapshotBeforeUpdate(prevProps, prevState) {
      if (prevState.count < this.state.count) {
        return 'count-increased';
      }
      // ๋ฐ˜ํ™˜๋œ ๊ฐ’์€ componentDidUpdate์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
      return null;
    }
    
    componentDidUpdate(prevProps, prevState, snapshot) {
      if (snapshot === 'count-increased') {
        console.log('Count was increased!');
      }
    }
}

export default MyComponent;
๋ฐ˜์‘ํ˜•