理解Fragments -- React高级指引

543 阅读1分钟

React 中的一个常见模式是一个组件返回多个元素。Fragments 允许你将子列表分组,而无需向 DOM 添加额外节点。

如下示例:Table组件中嵌套了一个子组件Columns

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

需要返回多个 元素以使渲染的 HTML 有效。如果在

的 render() 中使用了父 div,则生成的 HTML 将无效。

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

渲染后得到一个

输出如下:

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

Fragments解决了该问题。

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

这样就可以正确的输出

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

短语法:我们可以使用一种新的,且更简短的语法来声明 Fragments。它看起来像空标签

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

我们可以像使用任何其他元素一样使用 <> </>,除了它不支持 key 或属性。

祝大家变得更强!