01-react 入门

1.react 引入方法

<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.development.js"></script>

2.react 与原生DOM的对比

html 代码

<body>
    <div class="main"></div>
    <button id="btn1">原生JS创建</button>
    <button id="btn2">React创建</button>
</body>

2.1 原生js操作DOM

知识点

(1)let E = document.querySelector(‘E’); 获取页面元素

(2)let E = document.createElement(“E”); 创建新的元素

(3)E.innerText = 内容; 在元素E中填充内容

(4)父元素.appendChild(要追加的子元素);

    //获取页面元素
    let main = document.querySelector('.main');
    let btn1 = document.querySelector('#btn1');
    //定义一个数组 进行数据的初始化
    let infos = ["HTML", "CSS", "JS"];
    //创建一个ul 用来存放li
    let ul = document.createElement("ul");
    //遍历数组infos,循环创建li 
    infos.forEach((course) => {
       //创建li
        let li = document.createElement("li");
        //li里面填充内容
        li.innerText = course;
        //将li追加到ul中
        ul.appendChild(li);
    });
    //将ul追加到div中
    main.appendChild(ul)
    
   //btn1的点击事件
    btn1.onclick = () => {
        // 全部改变
        // main.innerHTML = "";//先将div中的内容清空,防止追加多个ul
        // let ul = document.createElement("ul");//创建一个ul 用来存放li
        // infos.forEach((course) => {//遍历数组infos,循环创建li ,重复上面的操作
        //     let li = document.createElement("li");
        //     li.innerText = course;
        //     ul.appendChild(li);
        // });
        // main.appendChild(ul);

        // 只改变某一项内容
        let lis = document.querySelectorAll('li');//获取到页面中的所有li元素
        lis[0].innerText = "JAVA";//将第一个li中的内容改变
    } 

2.2 react 操作DOM

知识点

(1)React.createElement(“元素名称”, 元素属性, 元素内容1, 元素内容2, 元素内容3…); 这里床件的元素不是原生DOM元素,而是一个React 特有的元素

(2) ReactDOM.render(元素, 渲染的位置);

(3)btn2.onclick = () => {}; 当页面元素使用 id 时,在使用过程中,可以不获取,直接进行使用

    let users = ["小明", "小红", "小李"];
    let lis = [];
    users.forEach((uname) => {
        let li = React.createElement("li", null, uname);
        lis.push(li)
    });
    // 这里创建的不是原生DOM元素,而是一个React特有的元素
    let ul = React.createElement("ul", null, lis[0], lis[1], lis[2]);
    // 最终,将创建好的React 元素,渲染到div中
    ReactDOM.render(ul, document.querySelector('.main'));
    // 点击事件
    btn2.onclick = () => {
        let lis = [];
        users.forEach((uname, i) => {
            let li;
            if (i == 0) {
                li = React.createElement("li", null, '张三');
            } else {
                li = React.createElement("li", null, uname);
            }
            lis.push(li);
        });
        let ul = React.createElement("ul", null, lis[0], lis[1], lis[2]);
        ReactDOM.render(ul, document.querySelector('.main'));
    }

总结

标签是由标签名称、属性、文本内容构成的

1.原生DOM在重复性的操作一组标签的时候,没有性能优化,浏览器每次都会重新渲染这一组标签,哪怕数据和标签都没有发生变化,浏览器每次都会讲标签名称、属性、文本内容重新渲染,造成渲染性能不高。

2.React元素在重复性操作一组标签的时候,进行性能优化,当标签、属性、文本内容这三项内容没有发生变化时,React是不会进行任何渲染DOM的操作。React只针对变化了的标签、文本内容、属性发生变化是,点对点的渲染(谁发生变化就渲染谁),而不是全部渲染。

【原因】:

​ React内置了一套虚拟DOM算法,用于对比新旧DOM变化,从而渲染变化了的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值