Fragment

在一个 React 组件中返回多个元素是一件很常见的事情。但是例如下面这个例子,可能就比较难以达到目的。

function Table(props) {
  return (
    <table>
      <tr>
        <Columns />
      </tr>
    </table>
  );
}

function Columns(props) {
  return (
    <div>
      <td>Column 1</td>
      <td>Column 2</td>
    </div>
  );
}

在这个示例中,Table 组件的渲染就将出现问题,因为 <table>标签的结构中是不能出现 <div> 标签的。但是又必须在组件中返回一个根标签结构,这种情况下,Fragment 就派上用场了。

Fragment 不会输出任何 UI,只是用来对需要返回的同级标签做分组。所以上面的这个示例就可以改成以下这个样子。

function Columns(props) {
  return (
    <React.Fragment>
      <td>Column 1</td>
      <td>Column 2</td>
    </React.Fragment>
  );
}

除了显式使用 <React.Fragment> 标签以外,还可以使用以下这样的简短模式。

function Columns(props) {
  return (
    <>
      <td>Column 1</td>
      <td>Column 2</td>
    </>
  );
}

如果用在循环里,每个子元素都需要使用一个 key 属性来进行唯一化标记,这时就必须使用显式的 Fragment 标签,例如 <React.Fragment key={item.id>}。