React 컴포넌트란 무엇인가?
React 컴포넌트는 UI를 구성하는 독립적인 블록으로, HTML, CSS, JavaScript를 하나의 단위로 묶어 관리합니다. 전통적인 웹 개발 방식에서는 HTML 태그를 반복 작성하거나 스타일을 일일이 적용해야 했지만, React에서는 컴포넌트를 통해 이러한 작업을 모듈화하고 재사용성을 극대화합니다. 예를 들어, 버튼, 카드, 내비게이션 바 같은 요소를 각각 컴포넌트로 정의해 필요할 때마다 호출할 수 있습니다.
컴포넌트 작성의 기본 원칙
- 함수형 컴포넌트: React 컴포넌트는 일반적인 JavaScript 함수입니다.
- 대문자 시작: 컴포넌트 이름은 HTML 태그와 구분하기 위해 반드시 대문자로 시작해야 합니다.
- JSX 사용: JSX는 JavaScript와 HTML을 결합한 문법으로, 컴포넌트가 UI를 선언적으로 표현하도록 돕습니다.
- 재사용성과 모듈성: 컴포넌트는 독립적이면서도 다른 컴포넌트와 조합할 수 있어야 합니다.
컴포넌트 만들기
개별 제품 정보 컴포넌트
function ProductItem({ title, price, imageUrl }) {
return (
<div className="product-item">
<img src={imageUrl} alt={`${title} 이미지`} width="150" />
<h4>{title}</h4>
<p>{price.toLocaleString()}원</p>
</div>
);
}
개별 제품 정보 컴포넌트 사용하기
제품 데이터를 배열로 관리하여 개별 제품 정보 컴포넌트를 사용하여 각 제품마다 동적으로 생성하게 만듭니다. 별도 HTML 작업 없이 데이터만 업데이트하면 UI는 자동으로 반영됩니다.
export default function ProductCatalog() {
const products = [
{ id: 1, title: "노트북", price: 1500000, imageUrl: "https://example.com/laptop.jpg" },
{ id: 2, title: "스마트폰", price: 900000, imageUrl: "https://example.com/phone.jpg" },
{ id: 3, title: "헤드폰", price: 250000, imageUrl: "https://example.com/headphones.jpg" },
];
return (
<div className="product-catalog">
<h1>제품 카탈로그</h1>
<div className="catalog-grid">
{products.map((product) => (
<ProductItem
key={product.id}
title={product.title}
price={product.price}
imageUrl={product.imageUrl}
/>
))}
</div>
</div>
);
}
컴포넌트 작성 시 주의사항
모듈화와 내보내기
다른 파일에서 컴포넌트를 사용하려면 export default로 내보내고, 사용할 때는 import로 불러와야 합니다.
// 내보내기
export default ProductCatalog;
// 가져오기
import ProductCatalog from './ProductCatalog';
JSX 문법 준수
JSX가 여러 줄일 경우 반드시 괄호로 감싸야 하며, 단일 루트 요소를 반환해야 합니다.
return (
<div>
<h1>제목</h1>
<p>내용</p>
</div>
);
컴포넌트 이름 규칙
컴포넌트 이름이 소문자로 시작하면 React가 HTML 태그로 인식하므로, 반드시 대문자로 시작해야 합니다.
렌더링 최적화
컴포넌트 내부에서 또 다른 컴포넌트를 정의하면 불필요한 재렌더링이 발생할 수 있습니다.
'REACT > 리액트 학습하기' 카테고리의 다른 글
[REACT] 조건부 렌더링으로 동적 UI 구현하기 (0) | 2025.03.10 |
---|---|
[REACT] Props를 활용한 컴포넌트 간 데이터 전달 (0) | 2025.03.10 |
[REACT] JSX에서 중괄호로 JavaScript 표현식 다루기 (0) | 2025.03.06 |
[REACT] JSX와 함께하는 마크업 작성 (0) | 2025.03.06 |
[REACT] 컴포넌트 분리와 재사용 (0) | 2025.03.06 |