리액트의 컴포넌트는 UI를 재사용 가능하고 독립적인 조각으로 나누는 React의 핵심 개념이다.
함수형 또는 클래스형으로 작성되며, HTML과 로직을 결합하여 동적인 UI를 구현한다.
리액트16.8이후로는 함수형 컴포넌트와 함께 훅(Hooks)을 사용하여 상태 관리와 라이프사이클 기능을 구현하는 것이 더 일반적이다.
state)와 데이터(props) : state와 props를 통해 동적인 UI를 구현function Button({ label, onClick }) {
return <button onClick={onClick}>{label}</button>;
}MyComponent)AppProps (속성)부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하기 위한 속성이다.
읽기 전용이다. (✨불변, 자식 컴포넌트에서 수정할 수 없다.)
예시
function Greeting({ message }) {
return <p>{message}</p>;
}
<Greeting message="좋은 하루~" />;
props를 받아 JSX를 반환하며, 간단하고 선언적이다.useState, useEffect 등을 사용하여 상태와 생명주기를 관리할 수 있다.function Welcome({ name }) {
return <h1>안녕하세요, {name}!</h1>;
}ES6 클래스를 사용하여 정의한다.
상태와 라이프사이클 메서드를 사용할 수 있다.
예시
import React, { Component } from 'react';
class Welcome extends Component {
render() {
return <h1>안녕하세요, {this.props.name}!</h1>;
}
}
| 특징 | 클래스형 컴포넌트 | 함수형 컴포넌트 |
|---|---|---|
| 문법 | 클래스 문법 사용 | 함수형 문법 사용 |
state 관리 | 가능(this.state) | 가능(useState) |
| 생명주기 관리 | 클래스 메서드 사용 | useEffect로 대체 |
| 가독성 | 상대적으로 복잡 | 간단하고 직관적 |
| 코드 재사용성 | HOC, Render Props | Custom Hook으로 간단히 해결 |
State (상태)컴포넌트 내부에서 관리되는 동적인 데이터이다.
함수형 컴포넌트에서는 useState 훅을 사용한다.
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
}
클래스형 컴포넌트는 라이프사이클 메서드(예. componentDidMount, componentDidUpdate)를 사용한다.
함수형 컴포넌트는 useEffect 훅을 사용하여 동일한 작업을 수행한다.
import { useEffect } from 'react';
function App() {
useEffect(() => {
console.log('컴포넌트가 마운트되었습니다.');
return () => {
console.log('컴포넌트가 언마운트됩니다.');
};
}, []); // 빈 배열이면 처음 한 번만 실행
}
props를 받아서 그에 맞는 화면을 출력한다.props로 전달하는 역할을 합니다.컴포넌트 컴포지션은 여러 개의 컴포넌트를 조합하여 복잡한 UI를 만드는 방식이다.
각 컴포넌트는 자신만의 역할을 가지며, 부모 컴포넌트가 여러 자식 컴포넌트를 관리하고 결합하여 복잡한 UI를 만든다.
예시
// Header, Main, Footer 컴포넌트를 각각 정의하고,
// App 컴포넌트에서 이들을 조합하여 하나의 전체 UI를 구성함
function App() {
return (
<div>
<Header />
<Main />
<Footer />
</div>
);
}