React Fragments于2017年11月随React 16.2.0引入。虽然它们已经存在了一段时间,但许多React开发人员避免使用它们或在不知道它们是什么的情况下使用它们。React Fragments是一个入门级但关键的功能,每个React开发人员都应该掌握它们,无论他们的技能水平如何。此外,考虑到它们已经成为React的一部分很长时间了,它们已经不能被忽视。
因此,让我们深入了解React Fragments的原因、内容、方法和时间,以掌握它们所需的所有内容。
为什么需要React Fragments
正如官方React文档所述,返回多个HTML元素是React组件中常见的期望行为。为了实现这一点,你必须用一个HTML标签来包含所有这些元素。这是因为React要求组件只返回一个HTML元素。最简单的解决方案是使用一个包装器
例如,假设你有一个Table组件,它渲染一个HTML表格,其列是用另一个名为Columns的组件渲染的。以下是你可能用于此的代码:
function Table() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
function Columns() {
return (
// the wrapper div used to return two <td> tags
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
这将导致渲染以下HTML,这是无效的,因为
<table>
<tr>
<div>
<td>Hello</td>
<td>World</td>
</div>
</tr>
</table>
React Fragments正是为了解决这个问题而引入的。
React Fragments是什么
React Fragments涉及一种特殊的语法,让你可以将一系列HTML元素分组,而不会添加额外的节点到DOM中。换句话说,React Fragments使你能够组合多个子组件,而不会在渲染的HTML中引入任何不必要的标记,为之前提到的问题和其他许多问题提供了解决方案。
如何使用他们
你可以通过使用<React.Fragments>标签来包装你的组件要返回的子元素来使用React Fragments。回到上面的例子,Columns组件将被写成以下形式:
function Columns() {
return (
<React.Fragment>
<td>Hello</td>
<td>World</td>
</React.Fragment>
);
}
这将导致Table组件被转化成以下HTML:
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
如你所见,渲染的HTML中没有包装标签。与之前发生的情况不同,这不会导致无效的HTML。
React Fragments也可以使用一个简短的语法,看起来像一个空标签:
function Columns() {
return (
// using <> is just like using <React.Fragment>
<>
<td>Hello</td>
<td>World</td>
</>
// using </> is just like using </React.Fragment>
);
}
这将导致与上面的例子相同的结果。因此,请记住,空标签是<React.Fragment>的简写形式。
什么时候使用他们
基本上,你应该在任何时候都使用React Fragments,如果你要为了让你的组件返回多个HTML元素而引入一个不必要的包装
通常有三种情况下使用React Fragments。让我们一一看看。
1. 包装多个HTML元素
正如你可能已经猜到的那样,包装多个HTML元素是React Fragments的最常见用法。每当你必须定义一个React组件来返回多个HTML元素时,你都应该使用<React.Fragment>或<>标记将它们包装起来。如前所述,这是推荐的方法,因为使用任何其他包装标记都可能导致无效的HTML。
2. Keyed Fragments
正如 React 文档所述,使用显式的 <React.Fragment> 语法声明的 Fragments 可以具有 key 属性,在处理任何 JavaScript 集合时非常有用。请注意,在使用简短语法时,这并不是情况。
例如,假设您有一个对象数组,其中每个元素都代表一个作者。您的目标是使用此数组中的数据呈现所有作者。这可以通过将每个数组元素映射到相应的 HTML 元素来实现,这要求 React 具有唯一的 key 属性。由于 React Fragments 支持 key 属性,因此可以利用它们在不引入任何额外标记的情况下实现。
在条件渲染方面,React 要求在两个分支中都必须返回一个单独的元素。这时候,React Fragments 就派上用场了,它可以让你更轻松地渲染元素组并避免添加不必要的额外标记。
总结
在这篇文章中,我们介绍了 React Fragments 及其为什么是每个 React 开发者都应该掌握的不可避免的功能。Fragments 允许您设计更好的 DOM 结构,避免插入不必要的