Фрагменты
Распространённый шаблон в 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 был валидным. Если внутри render() элемента <Columns /> использовать родительский 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> Фрагменты решают эту проблему.
Использование
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> Короткая запись
Существует новый, более короткий синтаксис для объявления фрагментов. Он выглядит как пустые теги:
class Columns extends React.Component {
render() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
} Вы можете использовать <></> их так же, как и любой другой элемент, за исключением того, что они не поддерживают атрибуты или ключи.
Ключевые фрагменты
Фрагменты, объявленные с явным синтаксисом <React.Fragment>, могут иметь ключи. Пример использования — отображение коллекции в массив фрагментов, например, для создания списка описаний:
function Glossary(props) {
return (
<dl>
{props.items.map(item => (
// Without the `key`, React will fire a key warning
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
</dl>
);
} key — единственный атрибут, который можно передать Fragment. В будущем мы можем добавить поддержку дополнительных атрибутов, например, обработчиков событий.
Живая демонстрация
Вы можете опробовать новый синтаксис JSX фрагментов с помощью этой CodePen.
Полезная ли эта страница?
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://17.reactjs.org/docs/fragments.html