쭈꾸미
코드짜는 쭈꾸미
쭈꾸미
전체 방문자
오늘
어제
  • 분류 전체보기 (122)
    • Journal (54)
      • Today I Learned (44)
      • 후기&회고 (4)
      • 개인 프로젝트 (4)
      • 독서일기 (2)
    • HTML, CSS (5)
    • Javascript (32)
    • Typescript (2)
    • Git, Github (4)
    • Algorithm (1)
    • React, Next.js (14)
    • API, Database (6)
      • API (0)
      • Database (1)
      • GraphQL (2)
      • Rest-API (1)
    • React-Native (1)
    • ETC (2)
    • OS (1)
      • 우분투 Ubuntu (1)

인기 글

티스토리

hELLO · Designed By 정상우.
쭈꾸미

코드짜는 쭈꾸미

[React] 클래스형 컴포넌트 vs 함수형 컴포넌트
React, Next.js

[React] 클래스형 컴포넌트 vs 함수형 컴포넌트

2022. 2. 9. 14:53

리액트의 컴포넌트 선언 방식

리액트에서 컴포넌트를 선언하는 방식에는 클래스형과 함수형 두 가지가 있다. 과거에는 클래스형 컴포넌트를 주로 사용했지만, 현재는 공식 문서에서 함수형 컴포넌트와 리액트 훅(hook)을 함께 사용할 것을 권장하고 있다. 하지만 아직 클래스형 컴포넌트를 사용하는 기업도 있을 수 있으니, 기본 형태와 두 가지 방식 간의 차이점은 알아둘 필요가 있다. (유지보수를 위해서도 필요함)

 

클래스형 컴포넌트란?

import React, { Component } from "react";
// Next.js를 사용하는 경우 React는 import하지 않아도 된다.

export default class ClassComponentPage extends Component {

  render() {
    return (
        <div>JSX 영역</div>
    );
  }
}

클래스형 컴포넌트의 기본 형태는 위와 같다.

  • state, 생명주기(lifeCycle) 관련 기능을 사용할 수 있다.
  • this를 사용해서 state / props / refs / 컴포넌트 메소드 / 생명주기 메소드를 참조할 수 있다.
  • 이 때 bind(this)를 사용해 클래스 내부의 요소를 명시하지 않으면 최상단의 window를 this로 인식하게 되므로 주의가 필요하다. (화살표 함수로 함수를 선언하는 경우에는 bind()를 사용하지 않아도 된다.)
  • 함수형에 비해 상대적으로 메모리를 많이 사용한다.
  • 컴포넌트를 사용하기 위해 react의 Component를 반드시 import 해줘야 한다.

 

클래스형 컴포넌트 예시

import React, { Component } from "react";

export default class ClassCounterPage extends Component {
  state = {
    count: 0,
  };

  onClickCounter = () => {
    this.setState((prev) => ({
      count: prev.count + 1,
    }));
  };

  render() {
    return (
      <div>
        <div>현재카운트: {this.state.count}</div>
        <button onClick={this.onClickCounter.bind(this)}>카운트 올리기</button>
      </div>
    );
  }
}

 

함수형 컴포넌트란?

import React from 'react'
// Next.js를 사용하는 경우 React는 import하지 않아도 된다.

export default function FunctionComponentPage(){
	return(
    	<div>JSX 영역</div>
    )
}

함수형 컴포넌트의 기본 형태는 위와 같다.

  • state, lifeCycle 관련 기능은 사용할 수 없다.
  • 리액트 훅(Hook)이 도입되며 위의 단점은 상쇄되었다. (useState, useEffect 등을 사용해서 구현 가능해짐)
  • 클래스형에 비해 상대적으로 적은 메모리를 사용한다.
  • 컴포넌트 선언이 편하고 클래스형에 비해 심플한 구조를 가지고 있다. 현재 리액트의 공식 문서는 함수형 컴포넌트 선언을 권장한다.

 

함수형 컴포넌트 예시

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

export default function FunctionCounterPage() {
  const [count, setCount] = useState(0);
  const onClickCounter = () => {
    setCount((prev) => prev + 1);
  };

  return (
    <div>
      <div>현재카운트: {count}</div>
      <button onClick={onClickCounter}>카운트 올리기</button>
    </div>
  );
}

 

저작자표시 (새창열림)

'React, Next.js' 카테고리의 다른 글

[React] setState - prevState (prev 인자)  (0) 2022.02.16
[React] 컴포넌트 생명주기 - Component Life Cycle (with useEffect)  (0) 2022.02.09
[React] 자주 쓰는 React 기반 라이브러리, 프레임워크 모음  (0) 2022.02.05
[React/Typescript] Eslint / prettier 설치 및 기본 세팅  (0) 2022.01.24
[React] 리액트의 핵심 2, Props  (0) 2022.01.20
    'React, Next.js' 카테고리의 다른 글
    • [React] setState - prevState (prev 인자)
    • [React] 컴포넌트 생명주기 - Component Life Cycle (with useEffect)
    • [React] 자주 쓰는 React 기반 라이브러리, 프레임워크 모음
    • [React/Typescript] Eslint / prettier 설치 및 기본 세팅
    쭈꾸미
    쭈꾸미
    느리지만 확실하게 / 웹 프론트엔드 개발자 TIL : https://jooeun-k.github.io/TIL/

    티스토리툴바