美文网首页
3.React中的JSX

3.React中的JSX

作者: 白水螺丝 | 来源:发表于2018-08-02 12:32 被阅读19次

    为什么要使用JSX呢?JSX又是什么呢?我们一步一步的了解。

    为什么使用JSX

    先看一个简单的例子,如下:

    // 1. 导入 react
    import React from 'react'
    import ReactDOM from 'react-dom'
    
    // 2. 创建 虚拟DOM
    // 参数1:元素名称  参数2:元素属性对象(null表示无)  参数3:当前元素的子元素string||createElement() 的返回值
    const divVD = React.createElement('div', {
      title: 'hello react'
    }, 'Hello React!!!')
    
    // 3. 渲染
    // 参数1:虚拟dom对象  参数2:dom对象表示渲染到哪个元素内 参数3:回调函数
    ReactDOM.render(divVD, document.getElementById('app'))
    

    React在render时(渲染时)需要传入一个虚拟DOM的对象。创建虚拟DOM对象的方式是原生JS。上面的例子中只是创建一个普通的Div节点。那么对于一个复杂并带有层级结构的页面时会是什么样呢?如下:

    var dv = React.createElement(
      "div",
      { className: "shopping-list" },
      React.createElement(
        "h1",
        null,
        "Shopping List for "
      ),
      React.createElement(
        "ul",
        null,
        React.createElement(
          "li",
          null,
          "Instagram"
        ),
        React.createElement(
          "li",
          null,
          "WhatsApp"
        )
      )
    )
    // 渲染
    ReactDOM.render(dv, document.getElementById('app'))
    

    可以看出,原生JS创建虚拟DOM非常的复杂且不友好。因此React的JSX就隆重登场了。

    JSX是什么

    JSX是JavaScript XML的简称,能在JS中编写的XML语法,用它来编写html标签或者组件标签。它是不能在浏览器中直接运行的,因此它需要babel-preset-react进行转码编译成原生JS后才能在浏览器中运行。所以简单的说JSX就是构建虚拟DOM的语法糖。

    注意:JSX语法,最终会被编译为 createElement() 方法
    推荐:使用 JSX 的方式创建组件
    安装:npm i -D babel-preset-react (依赖与:babel-core/babel-loader)

    /* 1 在 .babelrc 开启babel对 JSX 的转换 */
    {
      "presets": [
        "env", "react"
      ]
    }
    
    /* 2 webpack.config.js */
    module: [
      rules: [
        { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },
      ]
    ]
    
    /* 3 在 js 文件中 使用 JSX */
    const dv = (
      <div title="标题" className="cls container">Hello JSX!</div>
    )
    
    /* 4 渲染 JSX 到页面中 */
    ReactDOM.render(dv, document.getElementById('app'))
    

    JSX的注意点

    • 注意 1: 如果在 JSX 中给元素添加类, 需要使用 className 代替 class
      • 类似:label 的 for属性,使用htmlFor代替
    • 注意 2:在 JSX 中可以直接使用 JS代码,直接在 JSX 中通过 {} 中间写 JS代码即可
    • 注意 3:在 JSX 中只能使用表达式,但是不能出现 语句!!!
    • 注意 4:在 JSX 中注释语法:{/* 中间是注释的内容 */}

    因此上面那个复杂的原生JS语法就可以变成如下语法编写:

    //JSX语法
    ReactDOM.render(
      <div className="shopping-list">
          <h1>Shopping List for</h1>
          <ul>
            <li>Instagram</li>
            <li>WhatsApp</li>
          </ul>
      </div>
    , document.getElementById('app'))
    

    相关文章

      网友评论

          本文标题:3.React中的JSX

          本文链接:https://www.haomeiwen.com/subject/mtvjvftx.html