首页 > 其他分享 >react理解

react理解

时间:2023-05-30 15:12:40浏览次数:34  
标签:执行 函数 队列 react 副作用 理解 组件 useEffect

1.useEffect是什么?

副作用钩子:用于处理组件中的副作用,用来取代生命周期函数。

useEffect(()=>{//副作用函数
    return ()=>{ // 返回函数

    }
},[依赖参数])

  

2.useEffect可以做什么?

    • 挂载阶段:
      从上向下执行函数,如果碰到 useEffect 就执行并将 useEffect 传入的副作用函数推入一个队列(链表),在组件挂载完成之后,将队列(链表)中的副作用函数执行,并将副作用函数的返还函数,推入一个新的队列(链表)
    • 更新阶段 - !!! 更新阶段不同于其他阶段对应的函数是否要执行,取决于依赖参数:
      从上向下执行函数,如果碰到 useEffect 就执行并将 useEffect 传入的副作用函数推入一个队列(链表),在组件更新完成之后,找出之前的返回函数队列,依次准备执行,在执行前会判断该 useEffect 的依赖参数,如果依赖参数改变就执行,否则跳过当前项去看下一项,然后再执行副作用队列,执行时同样判断依赖是否变化,来决定其是否执行,如果执行,就重新获取其对应的返回函数。
    • 卸载阶段:
      组件即将卸载时,找出其对应的返回函数队列,依次执行

3.常规处理副作用的几种情况:

依赖参数不同时有不同的效果:

 1.参数为空: 组件的任何更新,该 useEffect 对应的返回函数和函数都执行

 2.为空数组: 不监听组件的更新

 3.数组中有具体依赖:对应的依赖数据,有变化的时候,才会执行

  1. 组件挂载完之后做某事
1 useEffect(()=>{
2     console.log("组件挂载完之后执行");
3     return ()=>{
4 
5     }
6   },[]);

 

  1. 组件挂载完成及更新完成做某事
1 useEffect(()=>{
2     console.log("组件挂载完成之后及更新完成之后执行");
3 })

 

  1. 组件更新完做某事
1 const isMounted = useRef(false);
2 useEffect(()=>{
3     if(isMounted.current){
4         console.log("组件更新完成")
5     } else {
6       isMounted.current = true;
7     }
8 })
  1. 组件即将卸载做某事
1 useEffect(()=>{
2     return ()=>{
3       console.log("组件即将卸载时执行");
4     }
5 },[]);

 

用useEffect模拟class组件的生命周期

 

模拟componentDidUpdate使用,可指定更新时依赖的数据

模拟componentDidMount使用,[]作第二个参数

模拟componentWillUnmount使用,通过return函数,[]作第二个参数

 

参考:

useEffect使用 - 简书
https://www.jianshu.com/p/af2455d4173f

标签:执行,函数,队列,react,副作用,理解,组件,useEffect
From: https://www.cnblogs.com/timeObserver/p/17443275.html

相关文章

  • 理解跨域以及那些请求可以跨域
    1. 跨域  321.1 图解1.2 演示可以跨域的标签  30- 跨域是指从一个域名的网页去请求另一个域名的资源。比如从百度(https://baidu.com)页面去请求京东(https://www.jd.com)的资源。- 通过超链接或者form表单提交或者window.location.href的方式进行跨域是不存在问题的(**大......
  • 转载-吴伟东-2022 年了,重新理解一波设备驱动
    原文链接:https://mp.weixin.qq.com/s/qqxDObNs8vjTFLQueX1J-A 哈喽,我是老吴。非常怀念写文章的感觉。昨晚复习了一些Linux驱动的基础知识,给大家分享一下吧。先说结论:多年来,我接触到的Linux驱动教程大多都是从0编写,这样对初学者而言最大的好处,就是可以接触到比较多......
  • AUTOCAD二次开发系列教程02-创建实体过程的理解
    目录01案例02步骤讲解03关键类理解04总结05源码地址01案例创建一个圆usingAutodesk.AutoCAD.ApplicationServices.Core;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.Geometry;usingAutodesk.AutoCAD.Runtime;namespaceHello.Cad.App01{......
  • lifecycle in react.js
    摘抄自reactinaction,seechapter4:直接上图: DEFINITIONMountingistheprocessofReactinsertingyourcomponentsintotherealDOM.Oncedone,yourcomponentis“ready,”andit’softenagoodtimetodothingslikeperformHTTPcallsorreadcookies.......
  • 转载-奇小葩-深入ftrace kprobe原理解析
    原文链接:https://blog.csdn.net/u012489236/article/details/127942216 Linuxkrpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术,利用kprobe技术,内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信......
  • “Fabarta 数据血缘治理解决方案”荣获“2023 鑫智奖”双料奖项
    5月23日,由金科创新社主办、全球金融专业人士协会支持的“2023鑫智奖·第五届金融数据智能优秀解决方案评选”评选结果正式揭晓。Fabarta数据血缘治理解决方案荣获“专家推荐TOP10优秀解决方案”及“数据治理与数据平台创新优秀解决方案”两项奖项。“鑫智奖”是业内颇具权......
  • Promise的理解
    三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败);状态变化:pending--->fulfilled或pending-->rejected(变化不可逆);then和catch对状态的影响:then和catch正常状态都会返回fulfilled,里面有报错则返回rejectedPromise解决多次调用的面条式代码将每个异步操......
  • react native 使用 redux、react-redux、redux-thunk、@reduxjs/toolkit 无脑版
    导入依赖yarnaddreduxreact-reduxredux-thunk@reduxjs/toolkit 这是目录,为以下创建作为参考新建reducer文件counterReducer.jsimport{createSlice}from'@reduxjs/toolkit';constcounterSlice=createSlice({name:'counter',//名字,用途如:state.count......
  • 译文:理解Java中的弱引用
    不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经......
  • 转载:Servlet 工作原理解析
     Servlet工作原理解析 Web技术成为当今主流的互联网Web应用技术之一,而Servlet是JavaWeb技术的核心基础。因而掌握Servlet的工作原理是成为一名合格的JavaWeb技术开发人员的基本要求。本文将带你认识JavaWeb技术是如何基于Servlet工作,你将知道:以Tomcat为例......