01-React入门

01-React入门


1.React的简介

1).介绍描述

  1. 用于动态构建用户界面的 JavaScript 库(只关注于视图)
  2. 由Facebook开源

2).React的特点

  1. 声明式编码
  2. 组件化编码
  3. React Native 编写原生应用
  4. 高效(优秀的Diffing算法)

3).React高效的原因

  1. 使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。
  2. DOM Diffing算法, 最小化页面重绘。

4).React相关js库

  1. react.js:React核心库。

  2. react-dom.js:提供操作DOM的react扩展库。

  3. babel.min.js:解析JSX语法代码转为JS代码的库。

    <!-- 引入react核心库 -->
    <script src="../js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DoM -->
    <script src="../js/react-dom.development.js"></script>
    <!-- 引入babe1,用于将jsx转为js -->
    <script src="../js/babel.min.js"></script>
    

2.React的基础

1).实现Hello

<!-- 准备好一个“容器” -->
<div id="test"></div>
<!-- 引入react核心库 -->
<script src="../js/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DoM -->
<script src="../js/react-dom.development.js"></script>
<!-- 引入babe1,用于将jsx转为js -->
<script src="../js/babel.min.js"></script>
<script type="text/babel">  /* 此处一定要写babel */
        // 1.创建虚拟DOM
        const VDOM=<h1>HELLO,React</h1>;    /* 此处一定不要写引号,因为不是字符串 */
        // 2.渲染虚拟DOM到页面
        ReactDOM.render(VDOM,document.getElementById('test'));
</script>

2).创建虚拟DOM的两种方式

a.纯JS方式(一般不用)
// 1.创建虚拟DOM
//         React.createElement(标签名,标签属性,标签内容)
const VDOM=React.createElement('h1',{id:'title'},'HELLO,React');
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'));
b.JSX方式
// 1.创建虚拟DOM
const VDOM=<h1 id="title">HELLO,React</h1>;    /* 此处一定不要写引号,因为不是字符串 */
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'));
c.纯JS与JSX写法的区别

当需要编写深度较深的HTML结构时,JSX的写法就更为清晰简便

//纯js
const VDOM=React.createElement('h1',{id:'title'},React.createElement('span',{},'HELLO,React'));
//JSX
const VDOM=(
    <h1 id="title">
        <span>HELLO,React</span>
    </h1>
);

3).虚拟DOM与真实DOM

  1. React提供了一些API来创建一种 “特别” 的一般js对象,下面创建的就是一个简单的虚拟DOM对象:
    const VDOM = React.createElement('xx',{id:'xx'},'xx')
  2. 虚拟DOM对象最终都会被React转换为真实的DOM
  3. 我们编码时基本只需要操作React的虚拟DOM相关数据, React会转换为真实DOM变化而更新界。
<!-- 准备好一个“容器” -->
<div id="test"></div>
<div id="demo"></div>
// 1.创建虚拟DOM
const VDOM=(
    <h1 id="title">
        <span>HELLO,React</span>
    </h1>
);
const TDOM=document.getElementById('demo');
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'));
console.log('虚拟DOM',VDOM);
console.log('真实DOM',TDOM);

可以看出虚拟DOM与真实DOM相比较,虚拟DOM少了很多的属性

a.关于虚拟DOM:

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

b.渲染虚拟DOM(元素)
  1. 语法:

    ReactDOM.render(virtualDOM, containerDOM)
    
  2. 作用:

    将虚拟DOM元素渲染到页面中的真实容器DOM中显示

  3. 参数说明:

    1. 参数一: 纯js或jsx创建的虚拟dom对象
    2. 参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)

3.React中的JSX

1).JSX的简介

  1. 全称: JavaScript XML
  2. react定义的一种类似于XMLJS扩展语法: JS + XML本质是React.createElement(component, props, ...children)方法的语法糖
  3. 作用: 用来简化创建虚拟DOM :
  1. 写法:var ele = <h1>Hello JSX!</h1>
  2. 注意1:它不是字符串, 也不是HTML/XML标签
  3. 注意2:它最终产生的就是一个JS对象
  1. 标签名任意: HTML标签或其它标签
  2. 标签属性任意: HTML标签属性或其它
  3. babel.js的作用:
  1. 浏览器不能直接解析JSX代码, 需要babel转译为纯JS的代码才能运行
  2. 只要用了JSX,都要加上type="text/babel", 声明需要babel来处理

2).JSX的写法

  1. 定义虚拟DOM时,不要写引号,因为不是字符串

  2. 标签中混入JS表达式时要用{}。

    const myId = 'aTGuiGu';
    const myData = 'HeLlO,rEaCt';
    // 1.创建虚拟DOM
    const VDOM = (
        <h1 id='myId'>
            <span>myData</span>
        </h1>
    );
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'));
    

    在JSX中直接编写JS表达式,程序不能读取的JS变量的值,需要在JS表达式外添加{}

    const myId = 'aTGuiGu';
    const myData = 'HeLlO,rEaCt';
    // 1.创建虚拟DOM
    const VDOM = (
        <h1 id={myId.toLocaleLowerCase()}>
            <span >{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    // 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'));
    

  3. 样式的类名指定不要用class,要用className

    <style>
        .title {
            background-color: orange;
            width: 200px;
        }
    </style>
    

    错误写法:

    
    // 1.创建虚拟DOM
    const VDOM = (
        <h1 class='title' id={myId.toLocaleLowerCase()}>
            <span>{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    

    报错:

    正确写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <h1 className='title' id={myId.toLocaleLowerCase()}>
            <span>{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    

  4. 内联样式,要用style={{key:value}}的形式去写。

    错误写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <h1 className='title' id={myId.toLocaleLowerCase()}>
            <span style="color: white;">{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    

    报错:

    正确写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <h1 className='title' id={myId.toLocaleLowerCase()}>
            <span style={{ color: "white" }}>{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    

    当内联样式中需要设置多词组成的属性,需要将属性名写成驼峰式名称:

    // 1.创建虚拟DOM
    const VDOM = (
        <h1 className='title' id={myId.toLocaleLowerCase()}>
            <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
        </h1>
    );
    
  5. 只有一个根标签

    错误写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <h1 className='title' id={myId.toLocaleLowerCase()}>
            <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
        </h1>
        <input type="text" />
    );
    

    报错:

    正确写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <div>
            <h1 className='title' id={myId.toLocaleLowerCase()}>
                <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
            </h1>
            <input type="text" />
        </div>
    );
    

  6. 标签必须闭合

    错误写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <div>
            <h1 className='title' id={myId.toLocaleLowerCase()}>
                <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
            </h1>
            <input type="text" >
                </div>
    );
    

    报错:

    正确写法:

    // 1.创建虚拟DOM
    const VDOM = (
        <div>
            <h1 className='title' id={myId.toLocaleLowerCase()}>
                <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
            </h1>
            <input type="text" />
        </div>
    );
    
  7. 标签首字母:

    1. 若小写字母开头,则将改标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。

      // 1.创建虚拟DOM
      const VDOM = (
          <div>
              <h1 className='title' id={myId.toLocaleLowerCase()}>
                  <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
              </h1>
              <input type="text" />
              <good>123</good>
          </div>
      );
      

    2. 若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。

      // 1.创建虚拟DOM
      const VDOM = (
          <div>
              <h1 className='title' id={myId.toLocaleLowerCase()}>
                  <span style={{ color: "white", fontSize: "20px" }}>{myData.toLocaleLowerCase()}</span>
              </h1>
              <input type="text" />
              <Good>123</Good>
          </div>
      );
      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值