首页 > 其他分享 >为什么以及什么时候 React 会渲染一个组件

为什么以及什么时候 React 会渲染一个组件

时间:2023-04-26 18:48:03浏览次数:38  
标签:调用 DOM 渲染 React 初次 组件

  组件显示到屏幕之前,其必须被 React 渲染。 在您触发渲染后,React 会调用您的组件来确定要在屏幕上显示的内容。“渲染中” 即 React 在调用您的组件。 在进行初次渲染时, React 会调用根组件。 对于后续的渲染, React 会调用内部状态更新触发了渲染的函数组件。 这个过程是递归的:如果更新后的组件会返回某个另外的组件,那么 React 接下来就会渲染 那个 组件,而如果那个组件又返回了某个组件,那么 React 接下来就会渲染 那个 组件,以此类推。这个过程会持续下去,直到没有更多的嵌套组件并且 React 确切知道哪些东西应该显示到屏幕上为止。

有两种原因会导致组件的渲染:

1.组件的 初次渲染

2.组件(或者其祖先之一)的 状态发生了改变。

1.1初次渲染 当应用启动时,会触发初次渲染。框架和沙箱有时会隐藏这部分代码,但它是通过调用目标 DOM 节点的 createRoot,然后用你的组件调用 render 函数完成的。 状态更新时重新渲染

2.1一旦组件被初次渲染,您就可以通过使用 set 函数 更新其状态来触发之后的渲染。更新组件的状态会自动将一次渲染送入队列。(您可以想象这种情况成餐厅客人在第一次下单之后又点了茶、点心和各种东西,具体取决于他们的胃口。)

在屏幕上显示组件所涉及的步骤

步骤 1: 触发一次渲染

步骤 2: React 渲染您的组件

步骤 3: React 把更改提交到 DOM 上

为什么渲染并不一定会导致 DOM 更新

对于初次渲染, React 会使用 appendChild() DOM API 将其创建的所有 DOM 节点放在屏幕上。 对于重渲染, React 将应用最少的必要操作(在渲染时计算!),以使得 DOM 与最新的渲染输出相互匹配。 React 仅在渲染之间存在差异时才会更改 DOM 节点。 例如,有一个组件,它每秒使用从父组件传递下来的不同属性重新渲染一次。注意,您可以添加一些文本到 input标签,更新它的 value,但是文本不会在组件重渲染时消失

 

标签:调用,DOM,渲染,React,初次,组件
From: https://www.cnblogs.com/ximenchuifa/p/17356956.html

相关文章

  • react 更新状态中的对象
    State可以保存任何类型的JavaScript值,包括对象。但是你不应该直接改变你在React状态下持有的对象。相反,当你想更新一个对象时,你需要创建一个新对象(或复制一个现有对象),然后设置状态以使用该副本。const[position,setPosition]=useState({x:0,y:0});从技术上讲,可......
  • drf之三大组件(认证组件、权限组件、频率组件)
    目录环境准备创建相关的表,models.py创建登录样例配置路由认证组件BaseAuthentication创建认证组件创建测试样例总结1.创建认证组件2.局部使用(只在一个视图类中使用,使用后会影响当前视图类中管理的所有接口)3.全局使用(对所有接口都生效)4.局部禁用权限组件BasePermission环境......
  • react18中antd的select选择器组件自定义下拉框的内容
    效果如图导入组件和图标import{Select}from'antd'import{ManOutlined,WomanOutlined}from'@ant-design/icons';const{Option}=Select;数据letuserListOption=[{value:1,label:"小明",avatar:"http://xxx......
  • 17.分类组件Category 动态获取数据
    我们接下来做分类组件Category,这个主要用来管理商品的分类,有一级和二级,可以实现一级与二级之间跳转/pages/category/category.jsx文件内容如下:importReact,{Component}from'react'import{Button,Card,Table,message}from'antd'import{PlusOutlined,......
  • 超大文件上传和断点续传的组件
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • react点击滑块验证
     css.wrap-num{width:300px;}@keyframesdefaultWave{0%{transform:scale(1);}20%{transform:scale(1.23);}40%{transform:scale(1);}100%{transform:scale(1);}}//旋转@keyframesloadingWave{0%{......
  • 重拾react杂记
     import{param,setParam}from'React'组件的名称必须以大写字母开头 <TableOfContents/>每个js文件只有一个exportdefaultfunctionxx(){}你的标签和return关键字不在同一行,则必须把它包裹在一对括号中, 注意:无论是子组件还是父组件,他们的名字都是大写字母开头,......
  • 实时云渲染赋能数字孪生实训平台,打造智慧教育
    随着数字化时代的到来,数字孪生技术在制造业、医疗、教育等领域中已经得到了广泛的应用。数字孪生技术在教育领域中的应用也越来越受到关注。数字孪生实训是一种利用数字孪生技术进行实践教学的方式,可以让学生更加深入地了解和掌握数字孪生技术在实际生产和生活中的应用。数字孪生......
  • 动力节点老杜Vue框架教程【三】Vue组件化
    Vue.js是一个渐进式MVVM框架,目前被广泛使用,也成为前端中最火爆的框架Vue可以按照实际需要逐步进阶使用更多特性,也是前端的必备技能动力节点老杜的Vue2+3全家桶教程已经上线咯!学习地址:https://www.bilibili.com/video/BV17h41137i4/视频将从Vue2开始讲解,一步一个案例,知识点......
  • 动力节点老杜Vue框架教程【三】Vue组件化
    Vue.js是一个渐进式MVVM框架,目前被广泛使用,也成为前端中最火爆的框架Vue可以按照实际需要逐步进阶使用更多特性,也是前端的必备技能动力节点老杜的Vue2+3全家桶教程已经上线咯!学习地址:https://www.bilibili.com/video/BV17h41137i4/视频将从Vue2开始讲解,一步一个案例,知识点由浅入......