React高级指引:Fragments

上一节:Refs转发
下一节:高阶组件

React高级指引:Fragments

  • 引言
  • 动机
  • 用法
  • 短语法
  • 带key的Fragments
  • 在线Demo

引言

React一个常用的模式是组件返回多个元素。Fragment可以为你的子元素分组而不需要在DOM上为它们添加额外的节点。

render() {
  return (
    
      
      
      
    
  );
}

还有一种短语法可以用来声明它们。

动机

一个常用的模式是组件返回一列子元素。让我们来看看下面这个React片段:

class Table extends React.Component {
  render() {
    return (
      
        
); } }

为了使渲染出的HTML能够有效展示,需要返回多个。但是如果的render方法中有一个

作为父元素,那么最终渲染出来的HTML是无效的。

class Columns extends React.Component {
  render() {
    return (
      
Hello World
); } }

最终在

中的结果是:

Hello World

很显然这是无效的HTML,Fragment为这一问题提供了解决方案。

用法

class Columns extends React.Component {
  render() {
    return (
      
        Hello
        World
      
    );
  }
}

上面的代码会在

中渲染出正确的代码:

Hello World

短语法

这里有一种短语法可以用来声明Fragment,它看起来就像是空标签:

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

你可以像使用其他元素一样使用它,除了它不支持key和属性。

带key的Fragments

使用语法声明的Fragment是可以有key的。一个使用场景是将集合映射到一组Fragment数组。举个例子:创建一个描述列表:

function Glossary(props) {
  return (
    
{props.items.map(item => ( //如果没有key,React将会展示一个key warning
{item.term}
{item.description}
))}
); }

key是唯一能传递给Fragment的属性。在未来,我们可能会支持其他如事件处理器的属性。

在线Demo

你可以在CodePen中尝试这个新的Fragment语法。

上一节:Refs转发
下一节:高阶组件

你可能感兴趣的:(JavaScript,前端,react)