首页 > 其他分享 >React18学习笔记 第六篇:对React内部运作深入了解

React18学习笔记 第六篇:对React内部运作深入了解

时间:2024-07-26 11:27:20浏览次数:11  
标签:渲染 元素 React 实例 React18 key 组件 第六篇

Part1 组件之间的概念差异

·组件

组件是我们为了描述用户界面的一部分而编写的,它只是一个普通的JavaScript函数,但它是一个返回React式元素的函数,这些元素是用JSX语法来编写的,我们可以把组件理解为一个“蓝图”或“模板”。

·组件实例

一个组件实例就像是一个组件的实际物理表现,通俗来讲,React在哪里调用了组件,哪里就有组件实例。事实上,每个实例都有自己的状态和道具,也有自己的生命周期,就像一个活的有机体。

·React元素

当React在每个实例中执行代码,它们中的每一个都将返回一个或多个React元素。React元素基本上包含为当前组件实例创建DOM元素所需的所有信息,因此,React元素最终将会被转换为实际的DOM元素,然后被浏览器刷新到页面上。

 


Part2 组件在屏幕上显示的流程

·触发阶段

通过更新状态触发新的渲染,有两种情况,第一种是程序第一次运行(初始渲染),第二种是发生在一个或多个组件实例中的状态更新(重新渲染)

·渲染阶段

React调用我们的组件函数,并找出它应该如何更新DOM

·提交阶段

新元素可能或被放置在DOM中,已经存在的元素可能会被更新或删除,为了正确反映应用程序的当前状态

·刷新屏幕

浏览器注意到DOM已经更新,便刷新屏幕,这一步才实际上发生了视觉上的变化

 


Part3 key prop

key是一个特殊的道具,我们可以用它来告诉不同的算法某个元素是独一无二的,这对DOM元素和React元素都是有效的。在实践中,这意味着我们可以给每个组件实例一个唯一的标识,这将允许React区分同一组件类型的多个实例。

key通常会被用在列表中或者被用于重置状态

·key用于列表中

用法例子如下:

<ul>

     <Question key='q1' question={q[1]}/>

     <Question key='q2' question={q[2]}/>

</ul>

·key用于重置状态

例如:

<ContentBox>

     <Content

          content={{

               title:'title1'

               body:'body2'

          }}

          key="c23" //此处的key值为c23,使得React唯一标识此组件实例

     />

</ContentBox>

当我们想要一个新的content,可以给它一个不同的key,就会创造出一个全新的DOM元素,这样一来状态可以重置了,例如:

<ContentBox>

     <Content

          content={{

               title:'title1'

               body:'body2'

          }}

          key="c89" //此处的key值为c89,使得React唯一标识此组件实例

     />

</ContentBox>

 


Part4 关于渲染逻辑的规则

在React组件中,我们可以写入两种类型的逻辑,分别是渲染逻辑和事件处理函数。渲染逻辑基本上是位于组件顶层的所有代码,用于描述某个组件实例的视图应该是什么样子的。事件处理函数基本上就是执行的代码片段,作为处理程序正在监听的事件的结果。

渲染逻辑不允许产生任何副作用,换句话说,运行在顶层的逻辑并且负责渲染的组件应该与外界没有交互。这意味着渲染逻辑不允许执行网络请求、不允许创建计时器或者直接使用DOM API(比如使用添加事件监听器监听事件)

 


Part5 批处理状态更新

React在更新同一事件处理程序函数中的多个状态片段时,会把所有的状态批处理到一个状态上来更新整个事件处理程序,比如说:

const reset=function(){

     setAnswer(' ')

     console.log(answer)

     setBest(true)

     setSolved(false)

}

//在这个例子中有三个状态发生了更新,而React不会分别进行三次渲染,而是把这三个状态批处理,一起渲染

//组件状态在渲染阶段是存储在纤维树(fiber tree)中的,在上述代码中,在打印answer的地方时,渲染阶段尚未发生,所以React仍然在逐行读取函数,弄清楚哪些状态需要更新,因此,控制台打印answer的结果将会是answer原来的值。

状态更新只会在重新渲染后反映在状态变量中,出于这个原因,我们说React中的更新状态是异步的。

 


Part6 关于事件传播和事件委托的工作原理

假设现在有一个DOM树:

<html>

<body>

<div>

<header>

<div>

<button><button><button>

当我们点击button,事件触发,将会创建一个新的事件对象,这个对象会在文档的根目录(树的顶端html)中创建,然后,在所谓的捕获阶段,这个事件对象将会沿着整个树传播,一直到它到达目标元素(我们点击的那个button),我们可以通过在这个目标元素中放置事件处理程序函数来处理事件,在到达目标元素之后,事件对象就会立刻沿着整个树向上移动,也就是在所谓的起泡阶段。

React处理事件实际上是对应用程序中的所有事件执行事件委托,也就是将所有事件处理程序添加到根元素中。所以如果我们的代码中有多个点击处理程序,React实际上会以某种方式把它们捆绑在一起,只需要在纤维树的根节点上添加一个大的点击处理程序,可以理解为React为每个事件类型注册一个事件处理程序函数。

标签:渲染,元素,React,实例,React18,key,组件,第六篇
From: https://blog.csdn.net/2301_80425436/article/details/140702848

相关文章

  • 前端路由快速上手-React-Router
    1.前端路由简介前端路由是一种在单页面应用(SPA)中实现页面跳转的技术,它允许我们通过改变URL地址而无需重新加载页面来显示不同的内容。在前端路由中,每个路径(path)都对应一个组件(component),当访问特定的路径时,对应的组件就会在页面上渲染。2.创建路由开发环境要开始使用Rea......
  • 使用React脚手架时npx速度慢的问题解决
    React作为目前最流行的前端框架之一,其开发效率和组件化特性受到了开发者的广泛欢迎。然而在使用React脚手架工具,如create-react-app进行项目初始化时,有时会遇到npx命令执行速度非常慢的问题。本文将探讨这一问题的原因,并提供一些有效的解决方案。问题分析npx是Node.js包管......
  • cpanel 上的 React-django - MIME 类型('text/html')不是受支持的样式表
    我正在开发一个React-Django应用程序,并且它在本地运行当我将其安装在运行cpanel的服务器上时,它只显示一个空白页面。我的提供者检查了它并做了以下陈述:python应用程序在cpanel上正确安装错误原因应该在开发者端找到我制作......
  • 一文彻底搞懂浏览器事件机制、事件委托、事件冒泡、事件循环、Event Loop、react事件
    一、事件是什么?事件模型?事件是用户操作网页时发生的交互动作,比如click/move,事件除了用户触发的动作外,还可以是文档加载,窗口滚动和大小调整。事件被封装成一个event对象,包含了该事件发生时的所有相关信息(event的属性)以及可以对事件进行的操作(event的方法)。事件是用......
  • react18+antdPro可编辑表格的使用和数据联动
    在项目中经常会遇到这样的需求表格数据是需要编辑的而且有联动的需求,比如结论是单选形式选了存疑的才能选存疑类型然后会在上面tag显示对应的人数存疑>0人就显红,符合要求小于总数就显红而且选择为符合要求后还要清空存疑类型在vue中这很好实现得益于v-model......
  • React——useEffect和自定义useUpdateEffect
    useEffect是React的一个内置Hook,用于在组件渲染后执行副作用(例如数据获取、订阅或手动更改DOM)。它将在第一次渲染后和每次更新后都会执行。useEffect(()=>{//这里的代码将在组件挂载和更新时执行。},[dependencies]);//dependencies数组控制effect的重新执行。......
  • 【React】useState:状态更新规则详解
    文章目录一、基本用法二、直接修改状态vs使用`setState`更新状态三、对象状态的更新四、深层次对象的更新五、函数式更新六、优化性能的建议在React中,useState是一个非常重要的Hook,用于在函数组件中添加状态管理功能。正确理解和使用useState更新状态的规......
  • 【React】箭头函数:现代 JavaScript 的高效编程方式
    文章目录一、箭头函数的基本语法二、箭头函数的特性三、在React中的常见用法四、最佳实践在现代JavaScript中,箭头函数(ArrowFunctions)是一种简洁的函数表达方式,并且在React开发中非常常见。箭头函数不仅简化了函数的语法,还带来了与普通函数不同的行为特性。本......
  • react-flow 流程图2.0
    文件中需要下载的组件:npminstallreactflow(我的版本是[email protected])npminstallreact-markdown(下面流程图中用到了markdown)版本7.1.0npmiantd(版本5.18.3)npmiaxios(版本1.7.2)//marjdown中用到的样式字体等......
  • React中引入使用本地图片
    1、css样式中,可以写成如下:.login{ //映射路径background:url('@images/img-login.png');background-size:100%100%;}.box{ //相对路径background:url('../assets/images/box.png');background-size:100%100%;}2、在jsx文件中importLoginLogo1......