react 子元素更新_【跟着官网学React】元素渲染

本文介绍了React中的元素概念,它是构成应用的最小单元,不同于浏览器DOM元素。React元素是不可变的,更新元素需要创建新元素并使用ReactDOM.render()方法。React DOM通过对比新旧元素,只更新变化的部分,实现了高效的更新策略。
摘要由CSDN通过智能技术生成
2021年目标

每日更新一篇公众号文章!!!

写在前面

本文是【React基础】系列的第三篇文章,这篇文章中我们介绍一下在react中的"元素"这个概念,并且了解下它跟我们传统的浏览器DOM元素有什么不同。

概述

上一篇文章我们为大家介绍了react中独特的代码编写方式——JSX。通过上文的了解,我们知道我们可以将一段HTML标签代码直接赋值给一个JS变量,并且将这个变量传给react相应的方法之后,前端浏览器页面就会看到预期的显示效果,那在这个过程中,我们本文所介绍的"元素"这个东西到底是什么呢,我们接下来给大家简单介绍一下。

元素简介

在react中元素是构成react应用的最小单元,我们上一节提到的"组件"其实也是由元素构成,所以它们三者的关系就像这样:元素构成组件,组件构成项目应用。其实在react应用中元素描述了我们在页面上看到的内容。

我们之前定义过的element变量其实就是一个元素。react的元素跟我们浏览器的DOM元素不同,react的元素其实就是一个JS的普通对象,react dom会负责更新DOM元素并将其与react的元素保持一致。

元素渲染

我们将一个react元素渲染到页面的话,是要通过ReactDOM的render()方法来渲染的,例如下面的代码:

import React from 'react';
import ReactDOM from 'react-dom';

let element = <h1>元素渲染h1>;

ReactDOM.render(element, document.getElementById('root'));

上述代码就是将element这个元素通过ReactDOM的render()方法渲染到了页面上。render()方法需要传入两个参数:第一个参数是要渲染的元素,第二个参数是将要渲染的元素被渲染到的dom节点。在我们的react应用中,ReactDOM.render()方法其实就在index.js文件中调用了一次,所以我们会看到通过脚手架创建的react应用,这个方法的第二个参数一般都是一个id为"root"的div标签元素,因为我们所有的组件全都是渲染在这个div中的,但是如果你需要在其他的地方另外渲染另一个react页面元素或者集成一个已有的react应用的话,你可以再次调用这个方法,第二个参数传入另一个div标签元素。

元素更新

react中的元素是一个不可改变对象,所以它一旦创建后是不允许改变的,包括更改它的子元素和属性这些都是不允许的,如果我们要更新它的子元素或者属性的话,只能新建一个全新的元素,然后将这个元素传入ReactDOM.render()方法。

所以大家可能就会问,那这样一来性能岂不是很低了嘛?如果我想仅仅更改一个属性,我却需要创建一个全新的元素,并将这个元素传入ReactDOM.render()方法,这就相当于渲染了一个全新的页面啊,那么事实是这样吗,我们来看一个计数器的例子:

import React from 'react';
import ReactDOM from 'react-dom';

function tick() {
    const element = (
        <div><h1>X北辰北!h1><h2>It is {new Date().toLocaleTimeString()}.h2>div>
    );
    ReactDOM.render(element, document.getElementById('root'));
}

setInterval(tick, 1000);

上述代码就是在一个定时器里面循环调用ReactDOM.render()方法,并每次传入一个react元素,按照我们上述的猜想,页面每次会重新渲染这部分页面,那么事实是这样子嘛,我们打开浏览器控制台看一下:

3db57da5c9848f2de76ae4c151a706fc.gif

如上图所示我们可以看到,虽然我们每次调用ReactDOM.render()方法传进去了一个新的react元素,但是它并没有每次渲染传进去的整个元素,仅仅是渲染上一次和这次新传进去的元素中间变化了的部分,也就是上述例子中的"时间"这部分一直在改变,但是其余的部分并没有发生变化,这是为什么呢?原来React DOM它会将我们传入的元素及其子元素和它们之前的状态进行比较,然后只会进行必要的更新来达到我们预期的效果,就像上图一样,它通过比较后仅仅更新"时间"那部分DOM。

上述例子中尽管我们每一秒都会传进去一个描述整个UI树的元素,但是React DOM仅仅会更新改变了的内容。

以上就是关于React中元素的介绍以及元素渲染相关的介绍,大家只需要知道在react中什么是元素,并且我们即使传入一整个UI树,它仅仅会更新改变了的内容就行,后面更详细的内容我们在后续文章中介绍。

附: 18c8495fe11dabf7b7634d79cfcba394.png扫码关注我 7f62e3cc9b2faf3822ccc17a2b387f95.png公众号:WebGIS应用开发 在这里既有Web,也有GIS 欢迎大家关注,一起进步~ 688c1060d24ffe8cd69f2db068b19c75.png 79575cba679cb9fc883019e16af1765a.png

一个有性格的公众号

ID:X北辰北

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值