React中useEffect、useCallBack、useLayoutEffect
在函数中使用定时器
import { useEffect, useState } from "react";
export default function Funcom() {
useEffect(() => {
setInterval(() => {
console.log('我在执行---')
}, 1000)
}, [])
return (<div>我是组件</div>)
}
当我们切换组件的时候,组件别销毁的时候。
定时器也在触发。
如何在组件卸载的时候清除定时器呢?
我们可以使用 useEffect 中使用 return () => { }
在上面这个函数里面清除定时器

函数中使用 useEffect 清除定时器器
import { useEffect, useState } from "react";
export default function Funcom() {
useEffect(() => {
let timer= setInterval(() => {
console.log('我在执行---')
}, 1000)
// 当没有依赖的时候,组件销毁的时候执行
// 当它有依赖的时候,组件更新的时候回被执行
return () => {
console.log('当没有依赖的时候,组件销毁的时候执行')
clearInterval(timer)
}
}, [])
return (<div>我是组件</div>)
}
现在当我们切换页面后,
定时器也被清除了。
特别注意的是:useEffect:当没有依赖的时候,组件销毁的时候执行 return () => { }
useEffect:当它有依赖的时候,组件更新的时候回被执行 return () => { }
ps:在一个组件中,useEffect可以使用多次。
而生命周期钩子函数只可以使用一次,后面的会覆盖前面的生命周期钩子函数

useEffect和useLayoutEffect的区别

好奇
import { useEffect, useState } from "react";
export default function Funcom() {
const [count, setCount] = useState(1)
function addHandler() {
setCount(count+1)
}
return (<div>
<button onClick={addHandler}>计数器</button>
<h1>{ count }</h1>
</div>)
}
上面这一段代码,当我们点击按钮的时候。
count的数值会+1;视图也会更新。
难道大家不好奇吗?
当我们点击按钮的时候, 整个 Funcom组件都会更新一次,重新渲染一遍。
它怎么可能会保存住 count的值?是不是是不是挺好奇的呢?
有的小伙伴可能不相信:
当我们点击按钮的时候, 整个 Funcom组件都会更新一次,重新渲染一遍。
我们通过一个小粒子来看一下
小粒子-整个 Funcom组件都会更新一次,重新渲染一遍
import { useEffect, useState } from "react";
export default function Funcom() {
const [count, setCount] = useState(1)
let myunm=1
const addHandler=()=> {
setCount(count + 1)
myunm = myunm + 1
console.log(myunm ) //永远输出的是2
}
return (<div>
<button onClick={addHandler}>计数器</button>
<h1>{count}</h1>
</div>)
}
我们发现控制台永远输出的都是2.
可是我每次点击的时候,都给 myunm新增了+1;
怎么每次都是2呢?
因为每次点击的时候 Funcom 组件都被渲染了一次。
因此myunm每次的初始值都是1。所以每次打印出来的是2
记忆函数 useCallBack
防止因为组件重新渲染,导致方法被重新定义。这样性能不太好。
为了实现起到缓存的作用。提高性能。
我们可以使用 useCallBack 记忆函数。
可以帮助我们起到缓存的作用,只有第二个参数发生变化,才会重新声明一次。
useCallback的简单使用
import { useState,useCallback } from "react";
export default function Funcom() {
const [count, setCount] = useState(1)
const addHandler = useCallback(() => {
setCount(count + 1)
}, [count])
//只有当count发生变化后, addHandler 才会被重新声明一次。 提升性能
return (<div>
<button onClick={addHandler}>计数器</button>
<h1>{count}</h1>
</div>)
}

React中useEffect、useCallBack、useLayoutEffect的更多相关文章
- React的useEffect与useLayoutEffect执行机制剖析
引言 useEffect和useLayoutEffect是React官方推出的两个hooks,都是用来执行副作用的钩子函数,名字类似,功能相近,唯一不同的就是执行的时机有差异,今天这篇文章主要是从这两 ...
- React中useEffect使用
2019-08-24 07:00:00 文摘资讯 阅读数 1364 收藏 博文的原始地址 之前我们已经掌握了useState的使用,在 class 中,我们通过在构造函数中设置 this.s ...
- React中useEffect的简单使用
学习hooks 在 React 的世界中, 组件有函数组件和类组件 UI 组件我们可以使用函数,用函数组件来展示 UI. 而对于容器组件,函数组件就显得无能为力. 我们依赖于类组件来获取数据,处理数据 ...
- React中useLayoutEffect和useEffect的区别
重点: 1.二者函数签名相同,调用方式是一致的 2. 怎么简单进行选择: 无脑选择useEffect,除非运行效果和你预期的不一致再试试useLayoutEffect 区别详解:useEffect是异 ...
- react中Hooks的理解和用法
一.Hooks是什么? Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是 ...
- React报错之React Hook useEffect has a missing dependency
正文从这开始~ 总览 当useEffect钩子使用了一个我们没有包含在其依赖数组中的变量或函数时,会产生"React Hook useEffect has a missing depende ...
- React 中阻止事件冒泡的问题
在正式开始前,先来看看 JS 中事件的触发与事件处理器的执行. JS 中事件的监听与处理 事件捕获与冒泡 DOM 事件会先后经历 捕获 与 冒泡 两个阶段.捕获即事件沿着 DOM 树由上往下传递,到达 ...
- 哪种方式更适合在React中获取数据?
作者:Dmitri Pavlutin 译者:小维FE 原文:dmitripavlutin.com 国外文章,笔者采用意译的方式,以保证文章的可读性. 当执行像数据获取这样的I/O操作时,你必须发起获取 ...
- 解读vue-server-renderer源码并在react中的实现
前言 在博客开发的过程中,有这样一个需求想解决,就是在SSR开发环境中,服务端的代码是是直接通过webpack打包成文件(因为里面包含同构的代码,就是服务端与客户端共享前端的组件代码),写到磁盘里 ...
- react中使用截图组件Cropper组件
--最近项目用react,学习react并使用cropper组件裁剪图片. (这里开发组件不够统一有用tsx(TypeScript + xml/html)写的组件,有用jsx(javascript+x ...
随机推荐
- 华为云开源的Karmada正式成为CNCF首个多云容器编排项目
摘要:CNCF(云原生计算基金会)正式接纳由华为云贡献的多云容器编排项目Karmada,迎来CNCF首个多云容器编排项目. 北京时间9月15日,CNCF(云原生计算基金会)正式接纳由华为云贡献的多云容 ...
- 火山引擎 DataTester 科普:A/B 实验常见名词解释
DataTester 是字节跳动在 2019 年正式通过火山引擎数智平台推出的对外服务的 A/B 实验工具,它基于先进的底层算法,提供科学分流能力,提供智能的统计引擎,实验结果可靠有效,助力业务决策. ...
- Solon:Hello world!
Solon:Hello world! (一)新建一个 maven 空项目 (二)添加 maven 引用 <dependency> <groupId>org.noear</ ...
- AI 0基础学习,数学名词解析
AI学习过程中,常见的名词解析 中位数 将数据从小到大排序,奇数列,取中间值,偶数列,中间两个值的平均,可做为销售指标 众数 一组数据中,数值出现最多的那个.反映哪款产品,销量最好 平均数 比赛中,去 ...
- Nacos 1.2.1 集群搭建(二)MySQL、cluster 配置
三台虚机的IP地址被DHCP重分了一下1.MySQL 配置 先建一个 nacos_config 数据库 将SQL执行(方法很多,选自己喜欢的就行) 2.修改 application.propertie ...
- 注册中心 —— SpringCloud Netflix Eureka
Eureka 简介 Eureka 是一个基于 REST 的服务发现组件,SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务 ...
- 路径规划之 A* 算法
算法介绍 A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法.它有较好的性能和准确度.本文在讲解算法的同时也会提供Python语言的代码实现,并会借助matplotlib库动态的展示算 ...
- 素数算法补充之"筛法"
国庆中秋双节,就不写太长的文章了. 补充和复习一下以前没写的素数区间筛法算法吧 部分证明过程来自OI wiki 素数筛法 如果我们想要知道小于等于 \(n\) 有多少个素数呢? 一个自然的想法是我们对 ...
- nvm:npm的包管理器
NVM: npm的包管理器 其实许久前就像写这个模块了,只是之前使用后又搁置了,今天下项目时node版本不一致,才想起记录 nvm下载地址: Releases · coreybutler/nvm-wi ...
- S3C2440移植uboot之支持烧写yaffs映像及制作补丁
上一节S3C2440移植uboot之裁剪和修改默认参数裁剪了uboot,修改了默认的参数,这一节开始制作yaffs映像以及补丁文件 目录 烧写文件系统 分析源码 烧写yaffs试验 使用part制 ...