八. React的片段(fragments)

一. 動機

以下的例子簡潔清晰的反映了fragments的作用,在生產(chǎn)過程中,經(jīng)常會遇到這種情況:
首先,是在Table組件中插入Columns組件:

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

因為React組件最外層需要一個元素包裹,如果這時使用div標簽包裹,那么最終生成的HTML將是無效的。

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

這時候Fragment就派上用場了

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

這時候,Table組件就能被正確渲染如下:

<table>
  <tr>
    <td>Hello</td>
    <td>World</td>
  </tr>
</table>
1.2 簡寫語法

有一個新的,更短的語法可以用來聲明片段(fragments)。他看起來像是空標簽:

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

您可以像使用其他元素一樣使用<></>,只是它不支持 鍵(keys) 或 屬性(attributes)。

注:目前很多工具都不支持這個簡寫語法,所欲可能需要明確地使用<React.Fragment>,直到工具支持這個語法。

1.3 帶key的片段(fragments)

<React.Fragment />可以傳遞key值,如下:

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // 沒有`key`,將會觸發(fā)一個key警告
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

注:key是唯一可以傳遞給Fragment的屬性。在將來,可能會增加額外的屬性,比如事件處理。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容