z***@yeah.net
z***@yeah.net
  • 发布:2023-04-06 08:48
  • 更新:2025-03-24 18:17
  • 阅读:758

【报Bug】redirectTo后,还能收到uni.onNativeEventReceive事件

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 11

HBuilderX类型: 正式

HBuilderX版本号: 3.7.9

手机系统: Android

手机系统版本号: Android 11

手机厂商: 华为

手机机型: android

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

垃圾

预期结果:

垃圾

实际结果:

垃圾

bug描述:

uni小程序sdk,两个vue页面都调用uni.onNativeEventReceive,定义相同的事件,一个页面redirectTo到另外一个页面,原生发送定义的事件后,两个页面都触发了。不是说redirectTo会关闭之前的页面吗,为什么还能收到?

2023-04-06 08:48 负责人:无 分享
已邀请:
瑆箫

瑆箫

1️⃣、可以在redirectTo之前,手动调用uni.offNativeEventReceive(),将之前调用的onNativeEventReceive事件取消注册。

2️⃣、在onNativeEventReceive事件中,增加一个判断条件,判断是否为当前页面的事件。只有当前页面才会执行事件,避免了其他页面也执行该事件的情况。

  • 瑆箫

    redirectTo并不是完全关闭之前的页面,而是保留了页面栈中的前一个页面。在redirectTo之前调用的onNativeEventReceive依然会保留。为了解决这个问题,我们可以手动调用uni.offNativeEventReceive()取消之前的事件注册,或者在onNativeEventReceive事件中增加判断条件。

    2023-04-06 09:07

  • z***@yeah.net (作者)

    回复 瑆箫: 我找了很长时间才找到这个问题,uni.offNativeEventReceive()这个方法我在文档里也没搜到,最后加的判断条件,谢了

    2023-04-06 11:14

  • 瑆箫

    回复 z***@yeah.net: 嗯嗯

    2023-04-06 13:32

h***@163.com

h***@163.com

有没有一种可能,uni.onNativeEventReceive使用的姿势不对呢?例如:
App.onLaunch(() => {
uni.onNativeEventReceive((eventName,data)=>{
uni.$emit(eventName,data)
})
})

other.vue:
onMount(() => {
uni.$on(eventName,callBack)
})

onUnmounted(() => {
uni.$off(eventName,callBack)
})

要回复问题请先登录注册