React에서 컴포넌트가 여러 엘리먼트를 반환하는 것은 흔한 패턴이다. Fragments는 DOM에 별도의 노드를 추가하지 않고 여러 자식을 그룹화할 수 있습니다.

render() {
  return (
    <React.Fragment>
      <ChildA />
      <ChildB />
      <ChildC />
    </React.Fragment>
  );
}

단축 문법

class Columns extends React.Component {
  render() {
    return (
      <>
        <td>Hello</td>
        <td>World</td>
      </>
    );
  }
}

사용법

class Columns extends React.Component {
  render() {
    return (
      <React.Fragment>
        <td>Hello</td>
        <td>World</td>
      </React.Fragment>
    );
  }
}
<table>
  <tr>
    <td>Hello</td>
    <td>World</td>
  </tr>
</table>

임의의 div로 감싸면 table에서는 구조가 깨지게 된다. 이처럼 React.Fragment를 이용한다면 DOM 노드는 생성되지 않고 올바르게 구조를 지킬 수 있다.

key가 있는 Fragment

key가 있는 Fragment는 단축 표현(<></>)를 사용하지 못한다. (반대로 key만 없다면 무조건 사용)

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // React는 `key`가 없으면 key warning을 발생합니다.
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

다음과 같이 key를 전달할 수 있다.