React

React - Component

bergerac 2025. 4. 29. 09:11

컴포넌트란?

React에서 컴포넌트는 UI를 구성하는 가장 작은 단위다. HTML 태그처럼 생겼지만, 실상은 JavaScript(또는 TypeScript) 함수다. 이 함수는 특정 UI 조각을 반환하며, 상황에 따라 다르게 렌더링될 수 있다.

컴포넌트는 일반적으로 **대문자(UpperCamelCase)**로 이름을 작성해야 한다. 이는 일반 함수와 구분하기 위한 약속이며, JSX 문법 내에서 대문자로 시작하는 요소는 React 컴포넌트로 인식된다.

function Welcome() {
  return <h1>Hello, React!</h1>;
}

 

함수형 컴포넌트 vs 클래스형 컴포넌트

과거에는 클래스형 컴포넌트를 통해 상태 관리와 라이프사이클 메서드를 다뤘지만, 현재는 함수형 컴포넌트 + Hook 조합이 주류다.

  • 함수형 컴포넌트는 작성이 간결하고 직관적이다.
  • useState, useEffect와 같은 Hook을 사용하여 상태 관리와 사이드 이펙트를 처리할 수 있다.

함수형 컴포넌트 예제: 카운터 만들기

아래는 useState Hook을 사용해 카운트를 증가/감소하는 간단한 예제다.

이 컴포넌트는 useState를 활용하여 count를 선언하고 두개의 버튼을 통해 값을 조작한다. 이벤트 속성인 onClick는 JSX 문법에 따라 lowerCamelCase로 작성한다.

import React, { useState } from 'react';

function B_React_Counter() {
  const [count, setCount] = useState<number>(0);

  const increment = () => setCount(count + 1);
  const decrement = () => setCount(count - 1);

  return (
    <div>
      <p>VS 타입스크립트(카운터 예제)</p>
      <p>Count: {count}</p>
      <button onClick={increment}>증가</button>
      <button onClick={decrement}>감소</button>
    </div>
  );
}

export default B_React_Counter;

 

컴포넌트 가져오기와 내보내기

컴포넌트를 다른 파일에서 사용하려면 반드시 export를 해야 하며, 가져올 때는 import를 사용한다. 두 가지 방식이 있다:

  • export: 이름 그대로 가져와야 함 (컴포넌트명 변경 불가)
  • export default: 가져올 때 원하는 이름으로 변경 가능
// Img.tsx
export function Img() {
  return <img src="/dog.jpg" alt="강아지" width={300} />;
}

// C_Component.tsx
import { Img } from './Img';

function C_Component() {
  return (
    <div>
      <p>컴포넌트의 시작</p>
      <Img />
    </div>
  );
}

또한 Vite 환경에서는 절대 경로(@/경로)를 설정해서 보다 깔끔하게 import할 수 있다. 이 경우 vite.config.ts와 tsconfig.json에 경로를 지정해줘야 한다.

 

JSX 문법 간단 정리

JSX는 JavaScript 안에서 HTML처럼 마크업을 작성할 수 있게 해주는 문법이다. 다만 다음과 같은 규칙이 존재한다:

  • HTML 태그는 소문자로, 컴포넌트는 대문자로 시작
  • 이벤트 핸들러는 카멜 케이스로 (onClick, onChange 등)
  • JSX 내에서는 JavaScript 표현식을 중괄호 {} 안에 작성

정리

React에서의 함수형 컴포넌트는 가장 핵심적인 구조다. useState를 비롯한 Hook을 통해 상태 관리를 쉽게 할 수 있으며, 컴포넌트를 나누어 관리하면 유지보수도 편해진다. 아래와 같은 내용을 숙지하면 React 프로젝트를 시작하는 데 훨씬 수월할 것이다.

  • 함수형 컴포넌트로 UI 구성
  • Hook으로 상태 및 사이드 이펙트 관리
  • JSX 문법과 컴포넌트 사용 규칙
  • 컴포넌트의 모듈화 및 재사용성

'React' 카테고리의 다른 글

React - Rendering  (1) 2025.05.02
React - Props  (0) 2025.05.01
React와 JSX  (2) 2025.04.30
React는 프레임워크가 아닌 라이브러리  (1) 2025.04.28
React 환경설정/React 실행흐름  (1) 2025.04.27