1、为什么使用Fragments
A.在一个中嵌套一个包含列的组件class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
<Columns />
需要返回多个 <td>
元素以使渲染的 HTML 有效。如果在 <Columns />
的 render()
中使用了父 <div>
,则生成的 HTML 将无效。
B.得到一个 <Table />
输出在HTML中解析无效
<table>
<tr>
<div>
<td>Hello</td>
<td>World</td>
</div>
</tr>
</table>
2、Fragments的用法
A.将返回的列使用 <Fragment >
标签包含
class Columns extends React.Component {
render() {
return (
<React.Fragment>
<td>Hello</td>
<td>World</td>
</React.Fragment>
);
}
}
B.使用短语法替代<Fragment >
标签
class Columns extends React.Component {
render() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
}
C.得到HTML可以解析的 <Table />
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
3、带 key 的 Fragments
使用显式 <React.Fragment>
语法声明的片段可能具有 key。一个使用场景是将一个集合映射到一个 Fragments 数组。
key
是唯一可以传递给 Fragment
的属性。未来React官方可能会添加对其他属性的支持,例如事件。
key
是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>
);
}