1、为什么使用Fragments

A.在一个中嵌套一个包含列的组件
  1. class Table extends React.Component {
  2. render() {
  3. return (
  4. <table>
  5. <tr>
  6. <Columns />
  7. </tr>
  8. </table>
  9. );
  10. }
  11. }
  12. class Columns extends React.Component {
  13. render() {
  14. return (
  15. <div>
  16. <td>Hello</td>
  17. <td>World</td>
  18. </div>
  19. );
  20. }
  21. }

<Columns /> 需要返回多个 <td> 元素以使渲染的 HTML 有效。如果在 <Columns />render() 中使用了父 <div>,则生成的 HTML 将无效。

B.得到一个 <Table /> 输出在HTML中解析无效

  1. <table>
  2. <tr>
  3. <div>
  4. <td>Hello</td>
  5. <td>World</td>
  6. </div>
  7. </tr>
  8. </table>

2、Fragments的用法

A.将返回的列使用 <Fragment > 标签包含

  1. class Columns extends React.Component {
  2. render() {
  3. return (
  4. <React.Fragment>
  5. <td>Hello</td>
  6. <td>World</td>
  7. </React.Fragment>
  8. );
  9. }
  10. }

B.使用短语法替代<Fragment > 标签

  1. class Columns extends React.Component {
  2. render() {
  3. return (
  4. <>
  5. <td>Hello</td>
  6. <td>World</td>
  7. </>
  8. );
  9. }
  10. }

C.得到HTML可以解析的 <Table />

  1. <table>
  2. <tr>
  3. <td>Hello</td>
  4. <td>World</td>
  5. </tr>
  6. </table>

3、带 key 的 Fragments

使用显式 <React.Fragment> 语法声明的片段可能具有 key。一个使用场景是将一个集合映射到一个 Fragments 数组。
key 是唯一可以传递给 Fragment 的属性。未来React官方可能会添加对其他属性的支持,例如事件。
key是Fragment作为遍历的元素必要的属性

  1. function Glossary(props) {
  2. return (
  3. <dl>
  4. {props.items.map(item => (
  5. // 没有`key`,React 会发出一个关键警告
  6. <React.Fragment key={item.id}>
  7. <dt>{item.term}</dt>
  8. <dd>{item.description}</dd>
  9. </React.Fragment>
  10. ))}
  11. </dl>
  12. );
  13. }