본문 바로가기

React/이론공부

React.Fragment

React.Fragment 란

- 리액트에서는 하나의 컴포넌트가 여러 개의 엘리먼트들을 반환한다.

return (
	<div>
    	<h1>hello World</h1>
    </div>
)

- 리액트를 사용하기 위한 문법인 JSX 를 쓸 때, return 문 안에는 반드시 하나의 최상위 태그가 있어야 한다.

- 리액트가 하나의 컴포넌트 만을 리턴 할 수 있기 때문이다.

 

React.Fragment 기본 사용법

function App() {

  return (
    <React.Fragment>
      <h1>Hello, World</h1>
    </React.Fragment>
  );
}
function App() {

  return (
    <>
      <h1>Hello, World</h1>
    </>
  );
}
빈 태그를 사용해도 되지만, 상황에 따라서 React.Fragment 를 넣어줘야하는 경우도 있다. 예제를 확인해봅시다

 

React.Fragment  예제

 

Style 을 지정할 때

App.js

function App() {

  return (
    <div className='App'>
      <h1>Hello, World</h1>
      <Component />
    </div>
  );
}

Component.jsx

import React from "react";

const Component = () => {
  return (
    <>
      <h2>안녕하세요 리액트</h2>
      <p>반갑습니다.</p>
    </>
  );
};

export default Component;

- 컴포넌트는 최상위 태그가 있어야해서, div 로 묶었지만, div 를 묶으면 스타일을 지정해줄 때 div 를 한번 거쳐야한다.

그럴 때 사용하는게 React.Fragment 이다. Element 를 확인해본다.

 

Table 처럼 정해진 구조를 사용할 때

App.js

function App() {

  return (
    <div className='App'>
      <table>
        <tbody>
          <tr>
            <Component />
          </tr>
          <tr>
            <Component />
          </tr>
        </tbody>
      </table>
    </div>
  );
}

Component.jsx

import React from "react";

const Component = () => {
  return (
    <>
      <td>밥먹기</td>
      <td>코딩하기</td>
      <td>커피마시기</td>
    </>
  );
};

export default Component;

- td 을 묶어줄 최상위 태그가 필요한데, tr 의 자식요소로 div 는 들어가면 안된다.

- 그때 사용할 수 있는게 React.Fragment 이다.

 

Map () 사용할 때 Fragment 에게 key 값을 전달할 때

const Component = () => {
  const todoList = ["밥먹기", "코딩하기", "커피마시기"];
  return (
    <>
      {todoList.map((item, idx) => (
        <React.Fragment key={idx}>
          <td>{item}</td>
        </React.Fragment>
      ))}
    </>
  );
};

- 빈 Fragment 에게는 key 값과 같은 Props 를 전달해주지 못한다.

- 그때 사용하는게 React.Fragment 태그이다.

'React > 이론공부' 카테고리의 다른 글

React forwardRef  (1) 2023.01.25
React의 가상돔 (Virtual DOM)  (0) 2023.01.25
React.memo  (0) 2023.01.25
[React Hooks] useReducer  (0) 2023.01.25
[React Hooks] useCallback  (0) 2023.01.25