首页 > 其他分享 >addEventListener 监听不到 改变后的全局变量的值

addEventListener 监听不到 改变后的全局变量的值

时间:2022-11-08 16:59:39浏览次数:61  
标签:typeId const wxData addEventListener message 全局变量 data 监听

问题原因: addEventListener 和 data 的作用域不一样,以及 addEventListener 里面拿的永远是最初的数据。 解决方法: 用ref来存储数据,让需要的数据保持最新

需求: 监听页面点击了分享按钮,点击了后,就携带一些数据分享到微信

 

 

 以下是初始的代码: 看着没啥问题吧?

const [data, setData] = useState({});

const getDaynamicDetail = ()=> {
 request({
      shareId,
      typeId,
    }).then(res => {
         setData(res);
        }
    });
};

const handleShare = () => {
    const wxData = data;
    jsBridge.shareWebpage({
      webpageUrl: `${configs.tyhUrl}/daynamicDetail?shareId=${wxData.shareId}&typeId=${wxData.typeId}&righttype=share`,
      title:
        wxData.typeId === '2' ? `欢迎新员工${wxData.title}加入我们` : wxData.title,
      description: `${wxData.typeId === '8' ? '正小谷' : wxData.custName}分享了一条社区动态`, // '7' 是员工分享, '8' 是系统分享
      thumbImageUrl: iconShengri,
    });
  };

useEffect(() => {
    getDaynamicDetail();
    // 监听点击了头部Header上的 分享按钮
    if (isAndroidOrIOS() === 'android') {
      document.addEventListener('message', e => {
        if (e?.data === 'share') {
          handleShare();
        }
      });
    } else {
      window.addEventListener('message', e => {
        if (e?.data === 'share') {
          handleShare();
        }
      });
    }
    return () => {
      if (isAndroidOrIOS() === 'android') {
        document.removeEventListener('message');
      } else {
        window.removeEventListener('message');
      }
    };
  }, []);

修改后的代码:

const data = useRef({});

const getDaynamicDetail = ()=> {
 request({
      shareId,
      typeId,
    }).then(res => {
         data.current = res;
        }
    });
};

const handleShare = () => {
    const wxData = data.current;
    jsBridge.shareWebpage({
      webpageUrl: `${configs.tyhUrl}/daynamicDetail?shareId=${wxData.shareId}&typeId=${wxData.typeId}&righttype=share`,
      title:
        wxData.typeId === '2' ? `欢迎新员工${wxData.title}加入我们` : wxData.title,
      description: `${wxData.typeId === '8' ? '正小谷' : wxData.custName}分享了一条社区动态`, // '7' 是员工分享, '8' 是系统分享
      thumbImageUrl: iconShengri,
    });
  };

useEffect(() => {
    getDaynamicDetail();
    // 监听点击了头部Header上的 分享按钮
    if (isAndroidOrIOS() === 'android') {
      document.addEventListener('message', e => {
        if (e?.data === 'share') {
          handleShare();
        }
      });
    } else {
      window.addEventListener('message', e => {
        if (e?.data === 'share') {
          handleShare();
        }
      });
    }
    return () => {
      if (isAndroidOrIOS() === 'android') {
        document.removeEventListener('message');
      } else {
        window.removeEventListener('message');
      }
    };
  }, []);

 

标签:typeId,const,wxData,addEventListener,message,全局变量,data,监听
From: https://www.cnblogs.com/zpy521hl/p/16870215.html

相关文章

  • Springboot 用session监听器统计在线用户数量
    今天给大家分享这个吧。利用Springboot中的session监听器去实现统计在线用户数量的需求(当然其实用shiro或者security是框架自己带有会话管理的,用起来更加方便)。但是,接下来......
  • Eureka 注册、下线、续约事件的监听使用
    前言看图: 现在开发节奏如此紧张,大多数人为了跟得上敏捷的节奏,也就无形中丢掉了对技术整合的更多的拓展学习。那么,我选择小白文科普。不管这些东西是否简单还是复杂,只要存......
  • SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)
    前言这一篇从应用角度来跟大伙讲讲这个spring事件监听机制,顺便涉及到那些我认为大家应该一块了解的,我也会展开说说。文章内容(包括不限于):1.对比观察者模式2.应用场景......
  • vue项目中定义全局变量、全局函数
    在vue项目中,我们经常会遇到要在多个页面组件中都要使用的一个变量或者函数,比如说需要配置的ip地址,在生产环境和测试环境不一样就需要修改。因此我们可以定义一个全局变量来......
  • python监听鼠标键盘
    https://blog.csdn.net/Jason_WangYing/article/details/114155511 #-*-encoding:utf-8-*-importtimeimportpyautoguiaspagimportkeyboard#https:/......
  • 微信小程序使用watch监听数据变化的方法
    众所周知,Vue中,可以使用监听属性watch来观察和响应Vue实例上的数据变化,那么小程序能不能实现这一点呢?监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一......
  • provide-inject-InjectionKey 标注类型配置全局变量
    官网TypeScript与组合式API|Vue.js(vuejs.org)文章provide-inject-InjectionKey标注类型配置全局变量-掘金(juejin.cn)provide-inject-InjectionKey标注类型......
  • VsCode预定义全局变量使用
    VsCode预定义全局变量使用在VsCode的launch.json和tasks.json中我们常用到一些全局变量,同时为了修改配置文件方便,还想自定义一些全局变量,这里做一下介绍。预定义全局变量......
  • 转 性能测试连载 (5)-jmeter 下的性能指标监听
    性能指标监听概述性能测试过程中,想要得到比较靠谱的性能数据,就不得不对各种性能数据进行动态监听。jmeter中提供了很多性能数据的监听器,我们通过监听器可以来分析性能瓶......
  • 局部变量和全局变量
    局部变量就是局部范围内有效的变量局部变量的定义位置:函数开头中间,以及形式参数。优点:再执行结束后会释放内存;全局变量就是在定义以下都有效的变量全局变量......