Class vs Hook

 

React 컴포넌트는 클래스형 컴포넌트(Class Component)와 함수형 컴포넌트(Functional Component)로 나뉜다.
기존의 개발방식은 함수형 컴포넌트를 주로 사용하되 state나 Life Cycle method를 사용해야 할 때 클래스형 컴포넌트를 사용

하지만 React버전 16.8에 새로 Hook이라는 개념이 추가되며 함수형 컴포넌트에서 클래스형 컴포넌트의 작업을 할 수 있게됨

이 포스팅에서는 Class와 Hook을 비교하고 Hook을 소개한다.

send me email if you have any questions.


Class형

1. 코드가 길고 복잡하다.
constructor, this, binding 등 지켜야 할 규칙이 많아서 코드가 복잡하고 길어진다.
Life Cycle method로 인해 클래스 자체가 무겁다.

2. Logic의 재사용이 어렵다.
부분적인 DOM 관련 처리나 API사용 및 state을 다루는 등의 logic에 있어서는 경우에 따라 같은 로직을 2개 이상의 Life Cycle method에 중복해서 넣어야하는 등 재사용이 어렵다.

class App extends Component{
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

Class형 컴포넌트

함수형(Hook)

Hook의 등장으로 인해 함수형 컴포넌트에서 클래스형 컴포넌트의 작업까지 할 수 있게되었다.
기존 클래스의 단점들을 한번에 해결

1. 선택적 사용
기존의 코드를 다시 작성할 필요 없이 일부의 컴포넌트들 안에서 Hook를 사용할 수 있다.
-> 100% 이전 버전과의 호환성

2. 쉬운 Logic의 재사용
Hook을 활용한 함수형 컴포넌트에서 원하는 기능을 만들어 필요한 곳에 집어넣기만 하면 된다.

import React, { useState } from 'react';

function Count() {
    const [count, setCount] = useState(0);

    return(
      <div>
        <h1>Counter</h1>
        <div>count: {count}</div>
        <button onClick={() => setCount(count + 1)}>+</button>
        <button onClick={() => setCount(count - 1)}>-</button>
      </div>
    );
}; 

export default Count;

함수형 컴포넌트(Hook)

참고