Vant NavBar左侧箭头点击后为什么会触发两次返回?
用Vant的NavBar组件时,左侧箭头@click绑定了自定义返回方法,但点击时发现控制台打印了两次log,实际也执行了两次跳转。我检查了代码没找到重复绑定,这是什么情况啊?
代码这样写的:
<van-nav-bar
left-arrow
@click-left="handleBack"
/>
然后方法是handleBack() { console.log('back'); }。
在Vue Devtools里看到点击时handleBack确实执行了两次,手动点击物理返回键没问题。用原生button测试@click只触发一次,难道是NavBar组件本身的bug?
left-arrow的点击事件做一次处理,而你又绑定了自己的@click-left方法,这样就导致了事件被触发了两次。解决办法很简单,你可以通过阻止默认行为来避免重复触发。把你的
handleBack方法稍微改一下,加上事件对象的判断和阻止默认行为的逻辑,像这样:另外,如果你用的是Vue 3或者Vant 3.x版本,建议检查一下是不是组件被意外渲染了两次,比如父组件的
key变化导致重新挂载。这种情况也会让事件看起来像是触发了两次。可以试试这样调整一下,应该就没问题了。如果还有别的异常情况,咱们再接着聊!