来自 Web前端 2020-05-07 05:42 的文章
当前位置: 网上澳门金莎娱乐 > Web前端 > 正文

网上澳门金莎娱乐:React.Fragment

时间: 2019-09-06阅读: 145标签: 场景

React.Fragment

官方文档:

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

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

render() { return ( React.Fragment ChildA / ChildB / ChildC / /React.Fragment );}

还有一种新的短语法可用于声明它们。

动机

一种常见模式是组件返回一个子元素列表。以此 React 代码片段为例:

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

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

class Columns extends React.Component { render() { return ( div tdHello/td tdWorld/td /div ); }}

得到一个Table /输出:

table tr div tdHello/td tdWorld/td /div /tr/table

Fragments 解决了这个问题。

本文由网上澳门金莎娱乐发布于Web前端,转载请注明出处:网上澳门金莎娱乐:React.Fragment

关键词: