리액트는 UI를 구성하는 기본 단위로 컴포넌트를 사용한다. 컴포넌트는 크게 함수형 컴포넌트와 클래스형 컴포넌트로 나뉜다. 이번 포스팅에서는 두 컴포넌트 유형에 대해 정리해보자.
JavaScript 함수를 정의하여 컴포넌트를 만드는 방식
함수형 컴포넌트는 자바스크립트 함수로 정의되며, props 를 입력받아 JSX를 반환한다.
import React from 'react';
// function 키워드를 사용한 함수형 컴포넌트
function FunctionComponent(props) {
return (
<div>
<h1>Hello, {props.name}!</h1>
<p>This is a function component.</p>
</div>
);
}
// 화살표 함수를 사용한 함수형 컴포넌트
const FunctionComponent = (props) => {
return (
<div>
<h1>Hello, {props.name}!</h1>
<p>This is a function component.</p>
</div>
);
};
export default FunctionComponent;
리액트 훅의 도입으로 인해 함수형 컴포넌트에서도 상태 관리와 생명주기 로직을 처리할 수 있게 되었다.
import React, { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log('Component did mount or update');
return () => console.log('Component will unmount');
}, [count]); // count 값이 변경될 때만 실행
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
export default Counter;
useState , useEffect 등 훅을 통해 상태 관리와 생명주기 메서드의 기능을 간단히 구현할 수 있다.ES6 클래스 문법을 사용하여 컴포넌트를 만드는 방식
클래스형 컴포넌트는 ES6 클래스로 정의되며, React.Component 또는 React.PureComponent 를 확장하여 만든다. 상태 관리와 생명주기 메서드를 활용하여 컴포넌트를 관리할 수 있다.
import React, { Component } from 'react';
class Counter extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
componentDidMount() {
console.log('Component did mount');
}
componentDidUpdate() {
console.log('Component did update');
}
componentWillUnmount() {
console.log('Component will unmount');
}
incrementCount = () => {
this.setState({ count: this.state.count + 1 });
};
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={this.incrementCount}>Increment</button>
</div>
);
}
}
export default Counter;
componentDidMount , componentDidUpdate ,componentWillUnmount 와 같은 생명주기 메서드를 통해 컴포넌트의 상태 변화 및 부수 효과를 세밀히 제어할 수있다.this.state , this.setState 를 통해 컴포넌트 상태를 명확히 관리할 수 있으며, 클래스 내부 메서드를 통해 코드가 구조적으로 분리될 수 있다.리액트 팀은 함수형 컴포넌트와 훅을 사용하는 것을 권장하고 있으며, 이는 리액트의 미래 방향성을 반영한다. 하지만, 프로젝트 요구 사항에 따라 두 컴포넌트를 선택하는 기준은 달라질 수 있다.
함수형 컴포넌트와 클래스는 각기 다른 장단점을 제공하며, 프로젝트의 요구사항과 개발자의 선호도에 따라 선택할 수 있다. 하지만 리액트의 최신 트렌드와 미래 방향성을 고려할 때 함수형 컴포넌트와 훅의 사용이 더욱 권장된다.
※ 참조 : freecodecamp - function-component-vs-class-component-in-react