React 中一个常见模式是为一个组件返回多个元素。Fragments 可以让你聚合一个子元素列表,并且不在DOM中增加额外节点。

Fragments 看起来像空的 JSX 标签:

render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}

一个常见模式是为一个组件返回一个子元素列表。以这个示例的 React 片段为例:

class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}

为了渲染有效的 HTML , <Columns /> 需要返回多个 <td> 元素。如果一个父 div<Columns /> 的 render()**** 函数里面使用,那么最终的 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 (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
}

在正确的 <Table /> 组件中,这个结果输出如下:

<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>

你可以像使用其它元素那样使用 <></>。

另一种使用片段的方式是使用 React.Fragment 组件,React.Fragment 组件可以在 React 对象上使用。 这可能是必要的,如果你的工具还不支持 JSX 片段。 注意在 React 中, <></> 是 <React.Fragment/> 的语法糖。

class Columns extends React.Component {
render() {
return (
<React.Fragment>
<td>Hello</td>
<td>World</td>
</React.Fragment>
);
}
}

带 key 的 Fragments

<></> 语法不能接受键值或属性。

如果你需要一个带 key 的片段,你可以直接使用 <React.Fragment /> 。

一个使用场景是映射一个集合为一个片段数组 — 例如:创建一个描述列表:

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 是唯一可以传递给 Fragment 的属性。在将来,我们可能增加额外的属性支持,比如事件处理。

最新文章

  1. 【Win 10 应用开发】启动远程设备上的应用
  2. Oracle碎碎念~1
  3. 阶段一:为View设置阴影和弹出动画(天气应用)
  4. Asp.net 解决下载乱码问题,支持火狐、IE、谷歌等主流浏览器
  5. Useful links
  6. 解决MVC中JSON字符长度超出限制的异常
  7. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q81-Q83)
  8. GridControl列自动匹配宽度
  9. cdoj 93 King&#39;s Sanctuary 傻逼几何题
  10. Linq to Sql 总生成 where ID is null 的解决办法
  11. 在openshift上自定义node.js的版本
  12. 使用 Python 的 SQLite JSON1 和 FTS5 扩展
  13. POJ 2234 Matches Game(取火柴博弈1)
  14. dubbo负载均衡策略及对应源码分析
  15. 简历HTML网页版
  16. 在CentOS 7中启动/停止/重启服务
  17. 【译】1. Java反射——引言
  18. Vue-CLI3.0版本配置BootStrap的方法
  19. LeetCode 590 N-ary Tree Postorder Traversal 解题报告
  20. 分享几套生成iMac相关高逼格免费mockup的素材和在线工具

热门文章

  1. 回首Java——写在前面
  2. C 语言学习 -1
  3. mysql主主半同步
  4. Android ViewPager进行碎片(Fragment)的分页操作
  5. boost之signal的使用
  6. Elasticsearch从入门到放弃:瞎说Mapping
  7. 基于.NetCore3.1系列 —— 日志记录之日志核心要素揭秘
  8. 文件上传Upload 学习笔记
  9. QT QMdiArea 添加背景或添加背景图片失效问题
  10. 基于注解的DI