Fragments
大约 1 分钟
如果一个组件返回多个元素,Fragments允许你将子列表分组,而无需向DOM添加额外节点。
如果是以下这种写法,会渲染多余的元素——div
:
:::detaiils 查看示例代码
import React from "react";
class Title extends React.Component {
render() {
return (
<div>
<h2>Fragments</h2>
<h2>Fragments</h2>
<h2>Fragments</h2>
<h2>Fragments</h2>
</div>
);
}
}
export default class App extends React.Component {
render() {
return <Title></Title>;
}
}
:::
可以使用短语法,它看起来像空标签,且实际它并不会渲染为新的标签元素: :::detaiils 查看示例代码
import React from "react";
class Title extends React.Component {
render() {
return (
<div>
<h2>Fragments</h2>
<h2>Fragments</h2>
<h2>Fragments</h2>
<h2>Fragments</h2>
</div>
);
}
}
export default class App extends React.Component {
render() {
return <Title></Title>;
}
}
:::
也可以使用Fragments,它实际也不会渲染为新的标签元素:
:::detaiils 查看示例代码 import React from "react";
class Title extends React.Component { render() { return ( <React.Fragment>
Fragments
Fragments
Fragments
Fragments
</React.Fragment> ); } }export default class App extends React.Component { render() { return ; } }
:::
但是Fragments是可以带key的: :::detaiils 查看示例代码
import React from "react";
class Title extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<>
{this.props.data.map((item, index) => (
<React.Fragment key={index + 1}>
<h2>{item}</h2>
</React.Fragment>
))}
</>
);
}
}
export default class App extends React.Component {
render() {
return <Title data={["Lorem", "ipsum", "dolor", "consectetur"]}></Title>;
}
}
:::
key
是唯一可以传递给 Fragment
的属性。未来我们可能会添加对其他属性的支持,例如事件。而空标签<></>
是不能添加key的。