addEventListener与useeffect相撞的火花

2023-10-20 19:30

本文主要是介绍addEventListener与useeffect相撞的火花,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

const [a, seta] = useState(1)
const [loading, setLoading] = useState(false) //用于等到某个异步操作返回结果后再允许再次触发fn函数useEffect(() => {document.addEventListener('LazShake.Event.onShakeOnce', () => {fn('listener');});}, []);useEffect(() => {setTimeout(() => {seta(2)},1000)},[])const fn = (from) => {if (loading) { return }setLoading(true);const time=new Date(Date.now())console.log(11111, 'from: ', from, "min: ",time.getMinutes(),"sec: ",time.getSeconds(), 'a: ',a);setTimeout(() => {setLoading(false)}, 2000)};

两种方式触发fn, 监听事件:addEventListener; 点击任意事件触发fn:click
发现:监听事件触发的fn,变量a不更新, loading参数不更新, 监听事件的fn为第一次渲染时候的快照,里面的参数后续不更新

在这里插入图片描述

如果将上述监听事件改为

  const triggerFn = useCallback(() => {fn('listener');}, [a]);useEffect(() => {document.addEventListener('LazShake.Event.onShakeOnce', triggerFn);return () => {document.removeEventListener('LazShake.Event.onShakeOnce', triggerFn)}}, [triggerFn]);

则能保证监听事件触发的fn能拿到最新的变量a
在这里插入图片描述
由于a是在一秒后更新了一次,因此addEventListener函数也只更新了一次,fn里面的loading变量也只更新了一次, 后续loading的更新对fn参数无效, 所以triggerFn依赖变量a还不够,还需要依赖loading变量

这篇关于addEventListener与useeffect相撞的火花的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249266

相关文章

js window.addEventListener 是什么?

window.addEventListener 是 JavaScript 中的一个方法,用于向指定对象(在这个情况下是 window 对象,代表浏览器窗口)添加事件监听器,以便在该对象上发生特定事件时执行相应的函数(称为事件处理函数或事件监听器)。 这个方法接受三个参数: 事件类型(type):一个字符串,表示要监听的事件类型。例如,"click" 表示鼠标点击事件,"load" 表示页面加

StyleGAN和Diffusion结合能擦出什么火花?PreciseControl:实现文本到图像生成中的精确属性控制!

之前给大家介绍过CycleGAN和Diffusion结合的一项优秀的工作,感兴趣的小伙伴可以点击以下链接阅读~ 图像转换新风尚!当CycleGAN遇到Diffusion能擦出什么火花?CycleGAN-Turbo来了! 今天给大家介绍StyleGAN和Diffusion结合的一项工作PreciseControl,通过结合扩散模型和 StyleGAN 实现文本到图像生成中的精确属性控制,该文章已

useEffect传递的空数组,为什么初始化的时候调用了两次

这是我的代码: import React, { useEffect } from 'react'import './scss/MyScene.scss'import Three from '@/common/three'export default function MyScene() {var three;useEffect(() => {three = new Three('my_sce

区块链技术与游戏的邂逅,将会擦出什么样的火花?

近年来,随着互联网的快速发展,各种高新技术开始步入人们的视野,其中以区块链为首的前沿技术,更是占据了现如今市场的半壁江山,而“区块链+”也开始逐步渗入到人们的日常生活中。 要说“区块链+”中哪一个是现在最为吃香的,“区块链+游戏”必须榜上有名。区块链技术与游戏的邂逅为这两个方面的发展都带来了广阔的前景。区块链游戏萌芽方面的革新促进了不可替代资产的极限,并有希望在可扩展性等其他方面继续给予创新的发

React学习day04-useEffect、自定义Hook函数

11、useEffect(一个React Hook函数) (1)作用:用于在React组件中创建不是由事件引起而是由渲染本身引起的操作,比如发送AJAX请求,更改DOM等(即:视图渲染完后会触发一些事件) (2)语法:(useEffect(()=>{},[]))         1)参数1是一个函数,也叫副作用函数,可在其内部放置执行的操作         2)参数2是一个数组(可选参),

【React】useEffect的使用场景与作用

useEffect 是 React 中的一个 Hook,用于在函数组件中执行副作用。副作用是指那些与渲染过程无关的操作,比如数据获取、订阅事件、手动操作 DOM、日志记录等。useEffect 允许你在函数组件中引入这些副作用,而不必依赖于类组件的生命周期方法(如 componentDidMount、componentDidUpdate 和 componentWillUnmount)。 useE

Python的起源与发展历程:从创意火花到全球热门编程语言

目录 创意的火花名字的由来圣诞节的礼物社区的力量今天的Python Python的起源可以追溯到1989年,当时荷兰计算机科学家Guido van Rossum(吉多·范罗苏姆)在阿姆斯特丹的荷兰国家数学和计算机科学研究所(CWI)工作。Python的起源和发展与Guido van Rossum的个人背景和动机紧密相连。 创意的火花 据说,Guido van Rossu

二次封装useEffect hook,实现页面加载时不触发

首先对useEffect进行二次封装 import { useEffect, useRef } from 'react';type Callback = () => void;function useEffectWithInitialEffect(callback: Callback,deps: React.DependencyList,shouldRunOnInitialRender: boo

react 中的useState useEffect

下面的这些hook我们常用的一些 useState  useEffect useCallback、useMemo、useRef 和 useContex 下一个文章中讲述(useCallback、useMemo、useRef 和 useContex) 下面我将讲解什么时候使用是最好的 首先我们需要明确的一点是,这些hook都是在做缓存。 目录 Hooks 是如何诞生的? useStat

Scratch中的数据可视化:点亮编程与艺术的火花

标题:Scratch中的数据可视化:点亮编程与艺术的火花在数字时代,数据可视化不仅是一种技术,更是一门艺术。Scratch,这款由麻省理工学院媒体实验室开发的编程工具,以其独特的视觉化编程方式,为孩子们开启了编程与艺术结合的大门。本文将详细探讨Scratch是否支持通过编程实现数据可视化或图表,并展示如何用Scratch创作出生动的图表。 在数字时代,数据可视化不仅是一种技术,更是一门艺术。Sc