We want to hear from you!Take our 2021 Community Survey!
This site is no longer updated.Go to react.dev

Фрагменти

These docs are old and won’t be updated. Go to react.dev for the new React docs.

These new documentation pages teach modern React:

Повернення кількох елементів з компонента є поширеною практикою в React. Фрагменти дозволяють формувати список дочірніх елементів, не створюючи зайвих вузлів в DOM.

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

Також існує скорочений запис.

Мотивація

Повернення списку дочірніх елементів з компонента є поширеною практикою. Розглянемо приклад на React:

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

<Columns /> повинен повернути кілька елементів <td>, щоб HTML вийшов валідним. Якщо використовувати div як батьківський елемент всередині методу render() компонента <Columns />, то HTML виявиться невалідним.

class Columns extends React.Component {
  render() {
    return (
      <div>
        <td>Привіт</td>
        <td>Світe</td>
      </div>
    );
  }
}

Результатом виводу <Table /> буде:

<table>
  <tr>
    <div>
      <td>Привіт</td>
      <td>Світe</td>
    </div>
  </tr>
</table>

Фрагменти вирішують цю проблему.

Використання

class Columns extends React.Component {
  render() {
    return (
      <React.Fragment>        <td>Привіт</td>
        <td>Світe</td>
      </React.Fragment>    );
  }
}

Результатом буде правильний вивід <Table />:

<table>
  <tr>
    <td>Привіт</td>
    <td>Світe</td>
  </tr>
</table>

Скорочений запис

Існує скорочений запис оголошення фрагментів. Він виглядає як порожні теги:

class Columns extends React.Component {
  render() {
    return (
      <>        <td>Привіт</td>
        <td>Світe</td>
      </>    );
  }
}

Ви можете використовувати <></> так само, як і будь-який інший елемент, проте такий запис не підтримує ключі або атрибути.

Фрагменти з ключами

Фрагменти, які оголошені за допомогою <React.Fragment> можуть мати ключі. Наприклад, їх можна використовувати при створенні списку визначень, перетворивши колекцію в масив фрагментів.

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // Без атрибута `key`, React видасть попередження про його відсутність
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

key — це єдиний атрибут, який можна передати у Fragment. В майбутньому планується додати підтримку додаткових атрибутів, наприклад, обробників подій.

Живий приклад

Новий синтаксис JSX фрагментів можна спробувати на CodePen.