问题原因: 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