zoukankan      html  css  js  c++  java
  • React-Fragments

    Fragments

    为什么需要fragments?

    先看一段错误示范的代码

    import React from 'react'
    class Table extends React.Component{
      render () {
        return(
          <table>
            <tr>
              <Cloumn></Cloumn>
            </tr>
          </table>
        )
      }
    }
    class Cloumn extends React.Component{
      render () {
        return(
          <td>1</td>
          <td>2</td>
        )
      }
    }
    export default Table
    
    

    当我们编译上述Cloumn的时候会抛出一个错误

    Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>? 
    

    这个错误的意思是——解析错误:相邻的JSX元素必须包装在一个封闭标签中。您是否想要JSX fragment或者<></>

    在使用React开发组件的时候,每一个React组件都必须返回一个根元素,如果我们将上述的Coumn组件改一下,给它添加一个根元素,如下

    class Cloumn extends React.Component{
      render () {
        return(
          <div>
            <td>1</td>
            <td>2</td>
          </div>
        )
      }
    }
    

    这时,也会在控制台报一个错误

    tr与td之间是不存在div标签的,当然我们也可以把tr移到Cloumn组件作为根元素,但是在React项目中,我们也需要组件返回多个并列标签/组件的情况,而fragments就是解决这样的问题

    Fragments

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

    用法

    我们可以将上述的Clomn代码改成

    class Cloumn extends React.Component{
      render () {
        return(
          <React.Fragment>
            <td>1</td>
            <td>2</td>
          </React.Fragment>
        )
      }
    }
    

    这样就可以正确的输出Table了

    我们也可以用段语法来实现

    class Cloumn extends React.Component{
      render () {
        return(
          <>
            <td>1</td>
            <td>2</td>
          </>
        )
      }
    }
    

    注:短语法不支持key或属性

    带key的Fragments

    function Glossary(props){
      return(
        <dl>
          {
            props.items.map(item => (
              <React.Fragment key={item.id}>
                <dt>{item.term}</dt>
                <dt>{item.description}</dt>
              </React.Fragment>
            ))
          }
        </dl>
      )
    }
    const user = [
      {
        name:'xxx',
        id:1,
        term:"des",
        description:'dksdoos'
      },
      {
        name:'xxx',
        id:2,
        term:"des",
        description:'dksdoos'
      },
      {
        name:'xxx',
        id:3,
        term:"des",
        description:'dksdoos'
      },
    ]
    function GlossaryShow(){
      return(
        <Glossary items={user}></Glossary>
      )
    }
    export  default GlossaryShow
    
  • 相关阅读:
    网络技术:网络互联模型
    二柱子代码版(应该不会在动它了)
    验证码-java界面版
    动手动脑1002
    动手动脑1001
    动手动脑0930
    动手动脑0929
    Java Web学习-0823
    Java Web学习-0822
    Java Web学习-0821
  • 原文地址:https://www.cnblogs.com/dehenliu/p/13451733.html
Copyright © 2011-2022 走看看