Общим примером в React является компонент для возврата нескольких элементов. Фрагменты позволяют группировать список детей без добавления дополнительных узлов в DOM.
render() {
return (
<React.Fragment>
<ChildA />
<ChildB />
<ChildC />
</React.Fragment>
);
}
Мотивация (Motivation)
Общим примером является компонент, который возвращает список дочерних элементов. Возьмем этот пример: отредактируем фрагмент:
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>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>
Короткий синтаксис
Существует новый, более короткий синтаксис, который можно использовать для объявления фрагментов. Он выглядит как пустые теги:
class Columns extends React.Component {
render() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
}
Вы можете использовать <></> то же самое, что и любой другой элемент, за исключением того, что он не поддерживает ключи или атрибуты. Обратите внимание, что многие инструменты еще не поддерживают его, поэтому вы можете явно писать <React.Fragment> до тех пор, пока инструмент не настигнет.
Ключ-фрагменты
Фрагменты, объявленные с явным <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. В будущем мы можем добавить поддержку дополнительных атрибутов, таких как обработчики событий.
0 комментариев