본문 바로가기
Javascript/react

React Fragments

by Redking

React를 이용해 컴포넌트를 만들고 JSX로 엘리먼트를 return해줄때 하나의 부모 엘리먼트로 감싸어지지 않으면 에러가 발생하는 경험을 겪은적이 있었다. 

function FuncName(props) {
    ...

    return <div></div>
    	   <div></div>;
}

이를 해결하기 위해서 원래 구조 계획에 있지 않던 엘리먼트를 생성하여 씌워주었지만 이 문제를 해결해주는 좋은 방법이 React에는 이미 있었다. 바로 이번 글에서 소개할 Fragments라는 문법이다.

 

Fragments

Fragments는 DOM에 별도의 노드를 추가하지 않고 여러 자식을 그룹화할 수 있다. 

class Table extends React.Component {
  render() {
    return (
      <table>
        <tr>
          <Columns />
        </tr>
      </table>
    );
  }
}

위와 같은 코드가 있을때 Columns 컴포넌트에는 <td>만 들어가 있어야 자연스러운 형태라고 느낄것이다. 그러나 Fragments를 사용하지 않으면 아래 코드와 같이 작성해야 오류가 발생하지 않는다. 이렇게 할 경우 <tr></tr>사이에 <div>가 들어가 어색한 형태가 된다.

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

 

이번에는 Fragments를 사용한 코드를 확인해 보겠습니다.

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

위와 같이 처리하면 더이상 <tr></tr>사이에 <div>가 들어가지 않아도 되고 2개의 <td> 엘리먼트만 들어가게된다.

 

Fragments를 선언하는 더 짧고 새로운 문법이 있습니다. 이는 엘리먼트에 태그가 없는것과 동일하다.

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

 

Fragments key가 있다면 <React.Fragment> 문법으로 명시적으로 선언해야 합니다. 예를 들어 정의 목록을 만들기 위해 컬렉션을 fragments 배열로 매핑하는 사용 사례입니다.

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>
  );
}

'Javascript > react' 카테고리의 다른 글

React에서 Axios 사용하기  (0) 2022.04.06
React 컴포넌트 라이브러리 Top 11  (0) 2021.06.02
React 주요 개념 Event 처리  (0) 2021.03.30
React 주요 개념 Lifecycle of Component  (0) 2021.03.29
React 주요 개념 State  (0) 2021.03.29

댓글