Class Component vs Functional Component

생명주기 메서드의 부재

  • props

    • 함수형 컴포넌트

      • props를 받아 단순히 리액트 요소만 반환

      • 생명주기 메서드 사용 불가

      • useEffect 훅을 이용하여 componentDidMount, componentDidUpdate, componentWillUnmount비슷하게 구현 가능

        useEffect는 생명주기를 위한 훅이 아님. 컴포넌트의 state를 활용해 부수 효과를 만드는 매커니즘

    • 클래스형 컴포넌트

      • render 메서드에 있는 React.Component를 상속 받아 구현하는 자바스크립트 클래스

      • 생명주기 메서드 사용 가능

함수형 컴포넌트의 렌더링된 값

함수형 컴포넌트는 렌더링 된 값을 고정하지만, 클래스형 컴포넌트는 그러지 못함

import React from 'react'

interface Props {
  user : string
}

export function FunctionalComponent (props : Props) {
  const showMessage = () => {
    alert(`Hello ${props.user}`)
  }

  const handleClick = () => {
    setTimeout(showMessage, 3000)
  }

  return <button onClick={handleClick}>클릭</button>
}
  • 함수형 컴포넌트

    • this와 다르게 state, props는 인수로 받기 때문에 값을 변경할 수 없고, 값을 그대로 사용함

  • 클래스형 컴포넌트

    • this를 기준으로 렌더링이 일어남


클래스형 컴포넌트를 공부해야 하는 이유

리액트가 오래된 만큼, 클래스형 컴포넌트들로 작성된 코드들이 많기 때문에 이러한 흐름들을 알 기 위해서는 클래스형 컴포넌트에 대한 지식이 필요함

자식 컴포넌트에서 발생한 에러에 대한 처리는 현재 클래스형 컴포넌트로만 가능하므로 에러 처리를 위해서라도 클래스형 컴포넌트에 대한 지식은 필요함

Last updated