1. 클래스형 컴포넌트?

react 컴포넌트 선언 방식 중 하나로 class를 이용하여 컴포넌트를 구성하는 방식입니다. 현재는 함수형 컴포넌트 사용이 권장되지만 함수형 컴포넌트가 나오기 예전 프로젝트의 유지보수를 위해 클래스형 컴포넌트에 대한 개념의 이해가 필요합니다.

클래스형 컴포넌트 사용

import React, { Component } from "react";

export default class ClassTest extends Component {
  // state 초기값 설정
  state = {
    nickname: "",
    age: 0,
    disabled: true,
  };

  // nickname, age 상태가 바뀔 때 마다 실행
  componentDidUpdate(prevProps, prevState) {
    // 조건문을 주어서 무한 반복을 막아야함
    // state 값이 변경됬을 경우에만 실행되도록 함
    if (
      this.state.nickname !== prevState.nickname ||
      this.state.age !== prevState.age
    ) {
      if (this.state.nickname && this.state.age !== "0") {
        this.setState({ disabled: false });
      } else {
        this.setState({ disabled: true });
      }
    }
  }

  changeNickname = (e) => {
    this.setState({ nickname: e.target.value });
  };

  changeAge = (e) => {
    this.setState({ age: e.target.value });
  };

  onSubmit = (e) => {
    e.preventDefault();
    console.log(`닉네임: ${this.state.nickname} 나이: ${this.state.age}`);
  };

  render() {
    return (
      <form onSubmit={this.onSubmit}>
        <div>
          <label htmlFor="input-nickname">닉네임 : </label>
          <input
            id="input-nickname"
            value={this.state.nickname}
            onChange={this.changeNickname}
            type="text"
          />
        </div>
        <div>
          <label htmlFor="input-age"> 나이 : </label>
          <input
            style={{ width: "30px", margin: "20px 0px" }}
            id="input-age"
            value={this.state.age}
            onChange={this.changeAge}
            type="number"
            min="0"
          />
        </div>
        <button type="submit" disabled={this.state.disabled}>
          확인
        </button>
      </form>
    );
  }
}

클래스형 컴포넌트의 lifeCyle

https://velog.velcdn.com/images/njt6419/post/10ed15bd-7352-4c72-94bc-780a39a1abb9/image.png

[출처] : https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

1 ) 마운트 : 컴포넌트가 렌더링이 되고 최초 한번 실행

constructor => render => ref => compoentDidMout