티스토리 뷰

Goal

 - React Fragments란?

 - React Fragments를 사용하는 이유

 - React Fragments 사용시 주의할 점

React Fragments

: 리액트 프래그먼트는 다수의 엘리먼트를 반환하는 컴포넌트를 위한 패턴으로, DOM에 부가적인 노드의 추가 없이 children을 그룹핑 할 수 있게 해준다.

A common pattern in React is for a component to return multiple elements. Fragments let you group a list of children without adding extra nodes to the DOM.

 

리엑트에서 컴포넌트가 반환하는 return 문 안에는 반드시 하나의 최상위 태그가 있어야 한다. 이는 리액트가 하나의 컴포넌트만을 리턴할 수 있기 때문이다. 이러한 특성 때문에 DOM에 부담을 주지 않고 같은 계층의 엘리먼트를 감싸기 위해 React Fragments를 자주 사용한다.

React Fragments를 왜 사용할까? 

예시를 통해 확인해보자.

다음과 같이 ChildA, B, C를 리턴하는 컴포넌트는 Child 엘리먼트를 감싸는 최상위 태그가 없기 때문에 JSX expressions must have one parent element 라는 오류를 발생시킨다.

render() {
  return (
  // 최상위 태그로 감싸져 있지 않고 같은 계층의 엘리먼트를 return하고 있으므로 오류 발생
      <ChildA />
      <ChildB />
      <ChildC />
  );
}

이 때 React.Fragment 태그로 감싸주면 오류를 해결할 수 있고 DOM에 새로운 노드를 추가하지 않아도 된다.

render() {
  return (
  // div태그와 같이 불필요한 엘리먼트를 선언하지 않고 오류를 해결 할 수 있다.
    <React.Fragment>
      <ChildA />
      <ChildB />
      <ChildC />
    </React.Fragment>
  );
}

React Fragments 사용시 주의할 점.

React.Fragment를 사용하기 위한 단축 문법도 있다. 하지만 단축 문법을 사용할 때는 각 엘리먼트에 key를 적용할 수 없기 때문에 사용을 지양하는게 좋다.

( https://stackoverflow.com/questions/59390955/can-i-add-a-key-prop-to-a-react-fragment )

class Columns extends React.Component {
  render() {
    return (
    // React.Fragment의 단축 문법, 사용이 간단하지만 key를 선언할 수 없다.
      <>
        <td>Hello</td>
        <td>World</td>
      </>
    );
  }
}
댓글