react hooks 中使用 addEventListener 监听事件无法访问到最新的 state 的问题

这篇具有很好参考价值的文章主要介绍了react hooks 中使用 addEventListener 监听事件无法访问到最新的 state 的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

示例:

const Exposure = (props: IExposure) => {
  const [hasAsyncData, SetHasAsyncData] = useState(false);

  useEffect(() => {
    if (props.asyncData) {
      SetHasAsyncData(true);
    }
  }, [props.asyncData]);

  useEffect(() => {
    window.addEventListener("touchmove", handleMove, false);
    window.addEventListener("scroll", handleMove, false);
    return () => {
      window.removeEventListener("touchmove", handleMove);
      window.removeEventListener("scroll", handleMove);
    };
  }, []);

  function handleMove() {
    console.log(hasAsyncData);
  }
  return <div ref={measuredRef}></div>;
};

export default Exposure;

如上述代码所示,props.asyncData 变化之后 hasAsyncData 设置为 true,然后滚动页面,handleMove 中的 hasAsyncData 仍然为初始值 false。
所以这时要在 hasAsyncData 变化后,重新绑定 addEventListener 事件

useEffect(() => {
  }, [hasAsyncData])

在useEffect中将他监听起来,从新绑定文章来源地址https://www.toymoban.com/news/detail-810471.html

const Exposure = (props: IExposure) => {
  const [hasAsyncData, SetHasAsyncData] = useState(false);

  useEffect(() => {
    if (props.asyncData) {
      SetHasAsyncData(true);
    }
  }, [props.asyncData]);

  useEffect(() => {
    window.addEventListener("touchmove", handleMove, false);
    window.addEventListener("scroll", handleMove, false);
    return () => {
      window.removeEventListener("touchmove", handleMove);
      window.removeEventListener("scroll", handleMove);
    };
  }, [hasAsyncData]); //改动了这里

  function handleMove() {
    console.log(hasAsyncData);
  }
  return <div ref={measuredRef}></div>;
};

export default Exposure;

到了这里,关于react hooks 中使用 addEventListener 监听事件无法访问到最新的 state 的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

    漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案 漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关 漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标 漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的

    2024年01月19日
    浏览(65)
  • Activiti7流程结束监听事件中,抛出的异常无法被spring全局异常捕捉

    activiti7中,提供了 ProcessRuntimeEventListener 监听器,用于监听流程实例的结束事件 上述代码中,由于1/0会抛出运行时异常,理论上来说应该被我们的全局异常所捕获 实际情况是无法捕获 既然异常没有被一层一层的抛出去直到被全局异常捕获,那说明调用 ProcessCompleteListener.onE

    2024年02月06日
    浏览(43)
  • React Hooks 基本使用

    class 组件如果业务复杂,很难拆分和重构,很难测试;相同业务逻辑分散到各个方法中,逻辑混乱 逻辑复用像 HOC 、 Render Props ,不易理解,学习成本高 React 提倡函数式编程,函数更易拆分,更易测试 但是函数组件太简单,为了增强函数组件的功能,媲美 class 组件: 函数组

    2024年01月21日
    浏览(39)
  • 【《React Hooks实战》——指导你使用hook开发性能优秀可复用性高的React组件】

    使用React Hooks后,你很快就会发现,代码变得更具有组织性且更易于维护。React Hooks是旨在为用户提供跨组件的重用功能和共享功能的JavaScript函数。利用React Hooks, 可以将组件分成多个函数、管理状态和副作用,并且不必声明类即可调用React内置的功能。而且,上述所有的操作

    2024年02月14日
    浏览(34)
  • 解决Iframe交互事件window.addEventListener触发多次问题

    addEventListener() 方法用于向指定元素添加事件句柄。 提示: 使用 removeEventListener() 方法来移除 addEventListener() 方法添加的事件句柄。 当我们审批流交互用到window.postMessage结合window.addEventListene这种消息传递技术来实现安全的通信。简单的来讲就是进行事件交互,如当我们有以下

    2024年02月11日
    浏览(39)
  • React Hooks 详细使用介绍

    useState 是 React 中的一个基础 Hook,允许你在不使用 class 组件的情况下管理组件状态。 参数 初始值 你可以直接传递状态的初始值给 useState : 使用函数设置初始值 当初始化状态代价较大时,你可以传递一个函数: 返回值 useState 返回一个数组,其中包括当前状态值和一个更新

    2024年02月13日
    浏览(31)
  • react中hooks的理解与使用

    一、作用 我们知道react组件有两种写法一种是类组件,另一种是函数组件。而函数组件是无状态组件,如果我们要想改变组件中的状态就无法实现了。为此,在react16.8版本后官方推出hooks,用于函数组件更改状态。 二、常用API 1、useState :存储变量和修改变量 用法: 有两个参

    2024年02月13日
    浏览(35)
  • React Hooks的useState、useRef使用

    React Hooks 是 React 16.8 版本引入的新特性,它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中, useState  和  useRef  是两个常用的 Hooks。 1. useState useState  是一个允许你在函数组件中添加 state 的 Hook。 使用说明: useState  返回一个状态变量和一个设置该变量的函

    2024年02月02日
    浏览(41)
  • React - Redux Hooks的使用细节详解

    Redux中Hooks介绍 在之前的redux开发中,为了让组件和redux结合起来,我们使用了react-redux库中的connect : 但是这种方式必须使用高阶函数结合返回的高阶组件; 并且必须编写:mapStateToProps和 mapDispatchToProps映射的函数, 具体使用方式在前面文章有讲解; 在Redux7.1开始,提供了Hook的方式

    2024年02月02日
    浏览(50)
  • react使用hook封装一个tab组件

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包