如何在同一onclick事件中调用两常量实现弹窗与emoji爆炸
问题根因
你的emoji爆炸效果不生效,核心问题是onClick回调里调用blast()时没有传入点击事件对象:blast函数依赖event.clientX和event.clientY拿到点击坐标,你不传参的话函数内部拿到的event是undefined,读取坐标属性直接报错,emojisplosion拿不到合法的渲染位置,自然不会出现效果。弹窗能正常打开是因为setButtonPopup(true)不依赖事件参数,所以不受影响。
修复方法
只需要把点击事件对象透传给blast即可,两种常用写法任选:
- 写法1:直接在现有内联回调里传参
<button type="button" onClick={(e) => { setButtonPopup(true); blast(e); // 把回调拿到的事件对象e传给blast }} > Contactar </button>
- 写法2:抽离统一的点击处理函数(更推荐,逻辑更清晰)
可以把两层调用合并,省掉不必要的blast包装函数:
// 在CTA组件内定义统一点击处理逻辑 const handleContactClick = (e) => { setButtonPopup(true); // 直接传坐标触发爆炸,不用多套一层blast explosion(e.clientX, e.clientY); } // 按钮直接绑定处理函数 <div className="vimcash__cta-btn"> <button type="button" onClick={handleContactClick}>Contactar</button> </div>
额外检查项
如果改完还是不生效,先确认你已经在文件顶部正确引入了emojisplosion库,未安装的话先执行npm i emojisplosion装依赖:
import { emojisplosion } from "emojisplosion";
内容的提问来源于stack exchange,提问作者ManP22
相关产品推荐
相关产品推荐

