useEffect 和useLayoutEffect 的区别

news/2024/7/15 19:32:49 标签: javascript, 前端, react.js

useEffect 可以接收两个参数,第一个参数是回调函数,回调函数的返回值是销毁时调用,第二个参数是依赖项,
依赖项是[],useEffect只执行一次

//使用useEffect之前要先引入
import React, { useEffect,useState } from 'react'
import ReactDOM from 'react-dom'

function App(){
  const [n,setN] = useState(0);
  const add=()=>{
    setN(i=>i+1);
  };

  // 第一次渲染,只执行这一次,[]要在第二个参数
useEffect(()=>{
      console.log('这是第一次渲染执行这句话');
    },[]);

  return(
    <div>
      n:{n}
      <button onClick={add}>+1</button>
    </div>
  )
}

ReactDOM.render(<App />,document.getElementById('root'));

依赖项不写的话,则每次渲染的时候都会执行一次

useEffect(()=>{
      console.log('这是第一次渲染执行这句话');
    });

依赖项的数组里面有值,依赖项的数据每发生一次变化,则会执行一次,依赖项是基本数据,只要基本数据发生变化就可以,依赖项是数组或者对象,进行的是浅比较,需要数组或者对象的引用地址发生变化才可以执行

useEffect(()=>{
      console.log('n变化了');
    },[n])

useEffect 和useLayoutEffect的区别

  1. 触发时机
    useEffect:是在组件渲染完成之后(首次渲染和更新渲染)异步触发的,也不会阻塞组件的渲染过程
    useLayoutEffect:是在组件完成渲染之后,浏览器执行绘制之前同步触发的。它会在DOM更新之前被调用,可以阻塞组件的渲染过程。
  2. 执行时间点
    useEffect:是在组件渲染完成之后的“提交阶段”执行的,这意味着它会在浏览器绘制之后执行,对用户可见性没有直接影响
    useLayoutEffect:是在组件完成后的“布局阶段”执行的,这意味着它会在浏览器执行绘制之前执行,对DOM的计算和布局有直接影响。因此,useLayoutEffect中的副作用操作会在浏览器更新屏幕之前同步触发。
    需要注意的是,由于useLayoutEffect的同步特性,如果在使用useLayoutEffect时进行大量计算或阻塞操作,可能会导致用户界面的卡顿和不响应。一般情况下,推荐使用useEffect,只有在需要在DOM更新之前立即执行某些操作时,采用useLayoutEffect.

http://www.niftyadmin.cn/n/5195714.html

相关文章

SpringCloud 微服务全栈体系(十四)

第十一章 分布式搜索引擎 elasticsearch 四、RestAPI ES 官方提供了各种不同语言的客户端&#xff0c;用来操作 ES。这些客户端的本质就是组装 DSL 语句&#xff0c;通过 http 请求发送给 ES。官方文档地址&#xff1a;https://www.elastic.co/guide/en/elasticsearch/client/…

Vue 2.0中引入的类型检查Flow

1. 认识 Flow Flow 是 facebook 出品的 JavaScript 静态类型检查工具。Vue.js 的源码利用了 Flow 做了静态类型检查&#xff0c;所以了解 Flow 有助于我们阅读源码。 2. 为什么用 Flow JavaScript 是动态类型语言&#xff0c;它的灵活性有目共睹&#xff0c;但是过于灵活的副…

2023.11.17使用flask将多个图片文件上传至服务器

2023.11.17使用flask将多个图片文件上传至服务器 实现功能&#xff1a; 1、同时上传多个图片文件 2、验证文件扩展名 3、显示上传文件的文件名 4、显示文件上传结果 程序结构 main.py from flask import Flask, request, jsonify, render_template import osapp Flask(__n…

Flutter笔记:缩放手势

Flutter笔记 缩放手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485138 目 录 1. 概述2. 缩放手…

『亚马逊云科技产品测评』活动征文|借助AWS EC2搭建服务器群组运维系统Zabbix+spug

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 zabbix 6…

python django 小程序图书借阅源码

开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…

二叉树推导-02

二叉树分解算法的核心思维是树间的推导 1.f(x) f(x) 1; 题目顺序 01 104. 二叉树的最大深度 02 111. 二叉树的最小深度 03 112. 路径总和 04 100. 相同的树 05 226. 翻转二叉树 06 114. 二叉树展开为链表 07 572. 另一棵树的子树 08 119. 杨辉三角 II 09 144. 二叉…

学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) 博主首页&#xff0c;更多redis、java等优质好文以及各种保姆级教程等您挖掘&#xff01; 目录 前言 JetBrains全家桶介绍 申请过程&#xff1a; 获取学…