[React] Fragment

2025. 3. 31. 14:52·React

❓ 정의

- Fragment는 React에서 여러 JSX 요소를 하나의 부모 요소로 감싸야 할 때, 추가적인 DOM 노드를 생성하지 않고 그룹화할 수 있도록 도와주는 컴포넌트다.

- 일반적으로 JSX 문법에서는 하나의 부모 요소만 반환해야 하는 제약이 있는데, Fragment는 이러한 제약을 해결하면서도 DOM 구조를 간결하게 유지하고 성능을 최적화하는 데 도움을 준다.

- React 개발자들이 컴포넌트를 설계할 때 불필요한 <div> 태그를 제거하고, 가독성과 유지보수성을 높이는 데 유용하다.

▶ 기본 사용 예시

import React from "react";

function App() {
  return (
    <React.Fragment>
      <h1>Title</h1>
      <p>Description</p>
    </React.Fragment>
  );
}

단축 문법(<> </>)을 사용하면 더 간결하게 작성할 수 있다.

function App() {
  return (
    <>
      <h1>Title</h1>
      <p>Description</p>
    </>
  );
}

❗ 사용이유

✅ 불필요한 DOM 노드 제거

- JSX 문법에서는 여러 요소를 반환하려면 <div>와 같은 부모 태그로 감싸야 한다. 하지만 이러한 태그는 실제 DOM에 추가되어 성능 저하나 CSS 스타일링 충돌을 유발할 수 있다. Fragment는 이러한 문제를 해결하며, 렌더링 결과에 영향을 미치지 않는다.

✅ 코드 가독성과 유지보수성 향상

- Fragment를 사용하면 불필요한 부모 태그 없이도 여러 요소를 그룹화할 수 있어 코드가 간결해진다. 이는 특히 복잡한 컴포넌트나 리스트 렌더링에서 가독성과 유지보수성을 크게 향상시킨다.


💥 주의

1️⃣ 속성 적용 불가

- Fragment는 가상의 컨테이너 역할만 하므로, className이나 style 같은 속성을 적용할 수 없다. 만약 속성이 필요하다면 <div>나 다른 HTML 태그를 사용해야 한다.

2️⃣ 단축 문법의 제한

- 단축 문법(<> </>)은 key 속성을 지원하지 않는다. 따라서 리스트 렌더링에서 고유한 key가 필요한 경우에는 반드시 React.Fragment를 사용해야 한다.


💠 예시

1️⃣ 여러 요소 반환

- 컴포넌트에서 여러 요소를 반환해야 할 때, 불필요한 <div> 태그 대신 Fragment를 사용할 수 있다.

function App() {
  return (
    <>
      <header>Header</header>
      <main>Main Content</main>
      <footer>Footer</footer>
    </>
  );
}

2️⃣ 리스트 렌더링

- 리스트 렌더링에서 각 항목을 그룹화하면서도 추가적인 DOM 노드를 생성하지 않으려면 Fragment를 사용할 수 있다.

function List({ items }) {
  return (
    <>
      {items.map((item) => (
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </>
  );
}

3️⃣ 조건부 렌더링

- 조건부 렌더링에서도 Fragment를 사용하면 불필요한 부모 태그 생성을 방지할 수 있다.

function ConditionalRender({ isLoggedIn }) {
  return (
    <>
      {isLoggedIn ? (
        <h1>Welcome back!</h1>
      ) : (
        <h1>Please log in.</h1>
      )}
    </>
  );
}

// 렌더링 결과
<dt>Term 1</dt>
<dd>Description 1</dd>
<dt>Term 2</dt>
<dd>Description 2</dd>

4️⃣ 스타일 충돌 방지

- 불필요한 <div> 태그로 인해 CSS 스타일이 꼬이는 것을 방지할 수 있다. Fragment는 스타일 충돌을 최소화하면서도 JSX 문법의 제약을 해결한다.

 

 

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'React' 카테고리의 다른 글

[React] 이벤트 핸들러에 함수를 전달하는 방식  (0) 2025.04.28
[React] 리액트의 폴더구조  (0) 2025.03.31
[React] Zustand의 Selector + shallow  (0) 2025.03.30
[React] useMemo, useCallback (+캐싱)  (0) 2025.03.30
[React] useCallback  (0) 2025.03.27
'React' 카테고리의 다른 글
  • [React] 이벤트 핸들러에 함수를 전달하는 방식
  • [React] 리액트의 폴더구조
  • [React] Zustand의 Selector + shallow
  • [React] useMemo, useCallback (+캐싱)
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (381)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (1)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    개발자취업
    Til
    항해99
    99클럽
    코딩테스트준비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
[React] Fragment
상단으로

티스토리툴바