useEffect的闭包陷阱和useInterval
闭包的作用:通过一系方法,将函数内部的变量(局部变量)转化为全局变量
在我的理解中,闭包就是能够读取其他函数内部变量的函数。
先看一段代码:
-
import { useEffect, useState } from "react";
-
import root from ".";
-
-
function App() {
-
const [count, setCount] = useState<number>(0);
-
-
useEffect(() => {
-
const timer = setInterval(() => {
-
setCount(count 1);
-
console.log({count})
-
}, 1000);
-
return () => clearInterval(timer);
-
}, []);
-
-
return (
-
<div>
-
<div>时间:{count}</div>
-
<div onClick={() => root.unmount()}>卸载</div>
-
</div>
-
);
-
}
-
-
export default App;
结果是页面展示的时间一直是1,控制台一直有输出{count:0}
解析:setCount(count 1)第一次执行到这时,读取到了外面这个函数App()的内部变量count 的值0,没有形成闭包,所以读取不到最新的值,在useEffect中得到的count就一直是0,每隔1000毫秒都在执行0 1就一直是1,所以页面显示不变。
想要实现每隔1000毫秒时间 1,必须获得App()函数中最新的count值
setCount(count => count 1)
,使用函数作为参数,接受一个旧的state(由react传入的state即App()函数中上一次修改之后的count值),得到新的state。
setState(param1,param2),param1有两种方式:对象/函数。对象:要先通过const拿到原来的值。函数:react会传递两个参数state即原来的值和props(很少用)。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgghfhg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13