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
    
  • 相关阅读:
    学习wxPython的一个例子
    Prismatic Joint(移动关节)
    利用Revolute Joint创建Motor
    FlashDevelop+OMSF第一个例子,关于编译常量的问题
    模拟从上向下看的汽车(Top Down Car Simulation)
    记一笔:As3监听键盘组合键如:Ctrl+Z,Ctrl+Y等
    渐变填充beginGradientFill或者lineGradientStyle的参数说明
    Revolute Joints(转动关节)
    播放本地视频的截图测试
    内建函数chr,str,ord的使用细节
  • 原文地址:https://www.cnblogs.com/dehenliu/p/13451733.html
Copyright © 2011-2022 走看看