Фрагменти
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.