Fragments

Salah satu pola umum pada React adalah mengembalikan banyak elemen sekaligus. Fragments memungkinkan Anda untuk mengelompokkan sejumlah elemen anak tanpa perlu menambahkan lagi node ekstra ke DOM.

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

Terdapat juga sintaksis singkat baru untuk mendeklarasikannya.

Motivasi

Sebuah pola umum untuk komponen mengembalikan sejumlah elemen anak. Lihat contoh potongan kode React berikut.

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

<Columns /> harus mengembalikan sejumlah elemen <td> untuk menghasilkan HTML dengan benar. Jika div induk digunakan di dalam render() pada <Columns />, maka akan menghasilkan HTML yang tidak benar.

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

menghasilkan sebuah <Table /> dengan luaran:

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

Fragments menyelesaikan masalah ini.

Penggunaan

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

yang menghasilkan luaran <Table /> dengan benar berupa:

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

Sintaksis Singkat

Terdapat sintaksis baru dan lebih singkat yang bisa kamu gunakan untuk mendeklarasikan fragments. Itu terlihat seperti tag kosong:

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

Anda bisa menggunakan <></> dengan cara yang sama kamu menggunakan elemen lainnya namun hal ini tidak mendukung key maupun atribut.

Fragments dengan Key

Fragments yang dideklarasikan secara eksplisit dengan sintaksis <React.Fragment> bisa memiliki key. Contoh kasus untuk ini yaitu saat melakukan pemetaan sebuah koleksi menjadi larik sejumlah fragment — contohnya saat membuat daftar deskripsi:

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // Tanpa `key`, React akan mengirimkan peringatan key
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

key merupakan satu-satunya atribut yang bisa diberikan kepada Fragment. Kedepannya, kami mungkin menambahkan dukungan untuk atribut lain, seperti penanganan event.

Demonstrasi Langsung

Anda dapat mencoba langsung sintaksis baru JSX fragment dengan CodePen ini.