ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • fragment
    Study/React 2020. 6. 4. 12:47

    fragment


     

    React의 패턴은 Component가 여러 요소를 반환하는 것이 일반적입니다. 

    Fragements 를 사용하면 DOM 노드에 추가하지 않고 하위의 목록을 그룹화 할 수 있습니다.

     

     

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

    새롭게 짧은 구문도 나왔지만, 아직 많은 툴에서 지원하지 않고 있습니다.

     

     

    Motivation


    일반적인 패턴은 아래와 같이 컴포넌트가 자식리스트를 반환하는 것 입니다. 

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

    렌더링 된 HTML이 유효하려면 <Columns />가 여러 <td> 엘리먼트만 반환해야 합니다. 

    <Columns /> render() 안에 부모 div로 자식들을 감싼다면 렌더링 된 HTML은 유효하지 않습니다.

     

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

     

    <Table />의 출력 결과는 다음과 같습니다.

     

    <table>
      <tr>
        <div>
          <td>Hello</td>
          <td>World</td>
        </div>
      </tr>
    </table>

    Fragments는 이 문제를 해결해줍니다.

     

     

     

    사용법


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

    올바른 <Table />의 출력 결과는 아래와 같습니다.

    <table>
      <tr>
        <td>Hello</td>
        <td>World</td>
      </tr>
    </table>

     

     

    단축 문법


    Fragments를 선언하는 더 짧고 새로운 문법이 있습니다. 마치 빈 태그와 같습니다.

     

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

     

    key 또는 어트리뷰트를 지원하지 않는다는 것을 빼고 다른 엘리먼트처럼 <></>을 사용할 수 있습니다.

     

    key가 있는 Fragments


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

    key는 Fragment에 전달할 수 있는 유일한 어트리뷰트입니다. 추후 이벤트 핸들러와 같은 추가적인 어트리뷰트를 지원할 수도 있습니다.

     

     

     

    출처: https://ko.reactjs.org/docs/fragments.html

    'Study > React' 카테고리의 다른 글

    리엑트란 무엇이며 왜 사용하는가?  (0) 2020.07.04
    react component lifecycle  (0) 2020.06.04
    yarn start에서 사용자권한 오류 발생시  (0) 2020.06.04
    Child Components Update Their Parents' state  (0) 2020.06.01
    Don't Update props  (0) 2020.06.01

    댓글

Designed by Tistory.