0102DOM-JSX语法-基础-React

1 Hello React

就如最初我们学习某个js一样,创建html,引入reactjs相关库,写Hello React。

  • reactjs相关库
    • react.development.js:react核心库
    • react-dom.development.js:react操作DOM扩展库
    • babel.min.js:jsx转js库,浏览器不识别jsx,需要babel转换成js。

步骤:

  • 创建html
  • 准备好容器
  • 引入react相关库
    • react.development.js,react-dom.development.js,babel.min.js顺序引入
  • script内编写jsx
    • script type=“text/babel

示例代码1-1如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Hello React</title>
</head>
<body>
  <div id="test"></div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <script type="text/javascript" src="../js/babel.min.js"></script>

  <script type="text/babel">
    // 1.创建虚拟DOM
    const VDOM = <h1>hello react</h1>
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>
</body>
</html>

2 虚拟DOM创建方式

我们要在页面展示的结构如下:

<h1>
	<span>hello,reac</span>
</h1>		

2.1 js方式创建

代码2.1-1如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>js创建虚拟DOM</title>
</head>
<body>
  <div id="test"></div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>

  <script type="text/javascript">
    // 1.创建虚拟DOM
    const VDOM = React.createElement('h1',{id: 'title'}, React.createElement('span',{}, 'hello, react'))
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>
</body>
</html>
  • 不需要babel.min.js

  • API格式

    React.createElement('标签名',标签属性,'内容')
    
    • 标签名:比如h1,div,table
    • 标签属性:对象,比如{key: value}
    • 内容:如果标签有嵌套,那么内容就需要嵌套创建

2.2 jsx方式创建

代码示例2.2-1如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jsx创建虚拟DOM</title>
</head>
<body>
  <div id="test"></div>
  <div id="demo"></div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <script type="text/javascript" src="../js/babel.min.js"></script>

  <script type="text/babel">
    // 1.创建虚拟DOM
    const VDOM = (
      <h1>
        <span>hello,react</span>
      </h1>
    )
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>
</body>
</html>

分析:jsx极大简化了创建虚拟DOM

2.3 虚拟DOM与真实DOM区别

示例代码2.3:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>hell react</title>
</head>
<body>
  <div id="test"></div>
  <div id="demo">111</div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <script type="text/javascript" src="../js/babel.min.js"></script>

  <script type="text/babel">
    // 1.创建虚拟DOM
    const VDOM = (
      <h1>
        <span>hello react</span>
      </h1>  
      )
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
    // 虚拟DOM和真实DOM比较
    console.log("虚拟DOM", VDOM)
    const rDOM = document.getElementById('demo')
    console.log("真实DOM", rDOM)
    debugger
  </script>
</body>
</html>

debugger 测试虚拟DOM,如下图2.3-1所示:在这里插入图片描述

debugger测试真实DOM,如下图2.3-2所示:在这里插入图片描述

关于虚拟DOM:

  • 本质是Object类的对象(一般对象)
  • 虚拟DOM比较“轻”,真实DOM比较重;虚拟DOM是React内部在用,无需真实DOM上那么多属性。
  • 虚拟DOM最终会被React转换为真实DOM,呈现在页面上。

3 JSX语法规则

  • 全称:JavaScript XML
  • react定义的一种类似于XML的JS扩展语法
  • 本质是React.createElement(component,props,…children)方法的语法糖。
  • 作用:简化创建虚拟DOM
    • 格式:var ele = <标签名>内容</标签名>
    • 他不是字符串,也不是HTML/XML标签
    • 它最终产生一个JS对象

示例代码3-1如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JSX语法规则</title>
  <style>
    .title {
      background-color: orange;
      width: 200px;
    }
  </style>
</head>
<body>
  <div id="test"></div>
  <div id="demo"></div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <script type="text/javascript" src="../js/babel.min.js"></script>

  <script type="text/babel">
    const myId = "helLO"
    const myText = "hello react"
    // 1.创建虚拟DOM
    const VDOM = (
      <div>
        <h2 className="title" id={myId.toLowerCase()}>
          <span style={{color: 'white', fontSize: '35px'}}>{myText}</span>
        </h2>
        <h2 className="title" id={myId.toLowerCase() + '1'}>
          <span style={{color: 'white', fontSize: '35px'}}>{myText}</span>
        </h2>
        <input type="text" />
        <good>23231</good>
      </div>  
      )
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
    /*
      jsx语法规则:
        1.定义虚拟DOM时,不要写引号
        2.标志中写入js表达式,需要用{}包裹
        3.样式类名指定时不要用class,要用className
        4.内联样式,要用style={{key: value,...,key: value}}的形式去写
        5.虚拟DOM有且仅有一个根标签
        6.标签必须闭合
        7.标签首字母
          (1)若小写字母开头,则将该标签转为html同名标签;若html中无同名标签报错
          (2)若大写字母开头,react就渲染对应的组件;若组件未定义,则报错
    */
  </script>
</body>
</html>

区分JS表达式和JS语句,示例代码3-2如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>hell react</title>
  <style>
    .title {
      background-color: orange;
      width: 200px;
    }
  </style>
</head>
<body>
  <div id="test"></div>
  <script type="text/javascript" src="../js/react.development.js"></script>
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <script type="text/javascript" src="../js/babel.min.js"></script>

  <script type="text/babel">
    /*
      区分:【js语句】和【js表达式】
      1.表达式:表达式是由运算符构成,并运算产生结果的语法结构。每个表达式都会产生一个值,它可以放在任何需要一个值的地方
        示例:
          (1) a+b
          (2) demo(1)
          (3) arr.map()
          (4) function fun() {}
      2.语句:语句则是由分号分隔的句子或命令,是一个行为
        示例:
          (1) 声明语句 const a
          (2) 赋值语句 const b = 2
          (1) 表达式语句:a+b;
          (2) 控制语句 if(a>b) {}

    */
    const data = ['Vue', 'React', 'Angular']
    // 1.创建虚拟DOM
    const VDOM = (
      <div>
        <h1>前端js框架列表</h1>
        <ul>
          {
            data.map((item, index)=>{
              return <li key={index}>{item}</li>
            })
          }
        </ul>
      </div>  
      )
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>
</body>
</html>

后记

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/react-study

参考:

[1]尚硅谷React教程(2022加更,B站超火react教程)[CP/OL].2020-12-15.p2-p6.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值