React.Fragment 作为根节点
在 React 中,render 函数 return 的内容只能有一个根节点,如果 return 多个元素需要用一个标签元素作为根节点包裹,否则会报错。
下面是不加根节点包裹的情况:
class App extends Component {
render() {
return (
<h1>大标题</h1>
<h2>小标题</h2>
);
}
}
解决方法:
一、包裹个 div 作为根节点
class App extends Component {
render() {
return (
<div>
<h1>大标题</h1>
<h2>小标题</h2>
</div>
);
}
}
此时 #root
下的结构:
二、包裹 Fragments 空标签
不加 div 的解决办法:用 Fragment 空标签替代:
class App extends Component {
render() {
return (
<>
<h1>大标题</h1>
<h2>小标题</h2>
</>
);
}
}
此时 #root
下的结构就不会多出一个“烦人”的 div 啦
三、包裹 React.Fragment 组件
不加 div 的解决办法:也可以用 React.Fragment 替代:
class App extends Component {
render() {
return (
<React.Fragment>
<h1>大标题</h1>
<h2>小标题</h2>
</React.Fragment>
);
}
}
这样 #root
下的结构就也不会多出一个“烦人”的 div:
React.Fragment 还常用于创建描述列表时作为带 key 的包裹层,例如:
function Glossary(props) {
return (
<dl>
{props.items.map(item => (
// 没有 key,将会触发一个 key 警告
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
</dl>
);
}
<></>
语法不能接受键值或属性。如果你需要一个带 key 的片段,可以直接使用 <React.Fragment />
。