uni-app 使用uni.switchTab调tabBar页面不触发onshow,onload生命周期

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app 使用uni.switchTab调tabBar页面不触发onshow,onload生命周期

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

重现步骤

[步骤] 从tabbar页面跳到子页面在通过uni.switchTab跳回tabbar页面 [结果] 不触发onShow生命周期 [期望] 触发onShow生命周期 [如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]

  • [IDE版本号]: 2.6.5 正式版最新版本
  • [mac版本号]:

uni-app运行环境说明

[运行端是h5或app或某个小程序?] app [运行端版本号]:

App运行环境说明

[Android版本号]:

  • [模拟器型号]:

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]

联系方式

[QQ]

测试demo.zip


15 回复

从子页面navigateBack回去就能触发onshow


我也遇到这个问题,麻烦官方看一下。

uni.switchTab({ url: ‘/pages/discover/discover’, success: function(e) { var page = getCurrentPages().pop(); if (page == undefined || page == null) return; page.onLoad(); } });

同样遇到了这个问题

同样遇到这种,请问怎么解决,2楼的方法试了好像不行,那应该怎么跳转

在需要执行onShow的tabbar页面 用vue的activated周期来处理onShow的逻辑,不触发页面onShow但是触发vue的activated周期 activated(){ // onShow逻辑写到这 },

其他行,app不行

我也遇到了,真服了啊

我也是 不执行,要刷新才可以,怎么解决?

可以从子页面navigateBack返回到tabbar页面,或者在跳转子页面的时候用 uni.reLaunch,再用uni.switchTab 跳转到tabbar页面

回复 喜欢技术的前端: 这个我试是可以的,就是用uni.reLaunch跳到子页面,子页面就回不去了。。。

我也遇到了,并且,偶发

在uni-app中,使用uni.switchTab进行页面跳转时,确实可能不会触发目标页面的onShowonLoad生命周期方法,这是uni-app框架设计的一部分。uni.switchTab主要用于在tabBar页面之间进行切换,而这些页面的生命周期管理与普通页面有所不同。

以下是一些相关的代码示例和解释,帮助你理解如何处理这种情况。

示例场景

假设我们有两个tabBar页面:HomeProfile

tabBar配置(pages.json)

{
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/home/home",
        "text": "Home"
      },
      {
        "pagePath": "pages/profile/profile",
        "text": "Profile"
      }
    ]
  }
}

Home页面(pages/home/home.vue)

<template>
  <view>Home Page</view>
</template>

<script>
export default {
  onLoad() {
    console.log('Home onLoad');
  },
  onShow() {
    console.log('Home onShow');
  }
}
</script>

Profile页面(pages/profile/profile.vue)

<template>
  <view>Profile Page</view>
</template>

<script>
export default {
  onLoad() {
    console.log('Profile onLoad');
  },
  onShow() {
    console.log('Profile onShow');
  }
}
</script>

使用uni.switchTab进行页面切换

在某个页面或组件中,使用uni.switchTab进行页面切换:

<template>
  <view>
    <button @click="switchToProfile">Go to Profile</button>
  </view>
</template>

<script>
export default {
  methods: {
    switchToProfile() {
      uni.switchTab({
        url: '/pages/profile/profile'
      });
    }
  }
}
</script>

注意点

  1. 首次加载:当你首次打开应用并导航到Profile页面时,onLoadonShow都会被触发。
  2. 后续切换:当你已经在Home页面,然后通过uni.switchTab切换到Profile页面时,Profile页面的onLoad不会再次触发,但onShow会被触发。

解决方案

如果你需要在切换tab时执行一些操作,可以考虑在onShow生命周期中处理,或者利用全局状态管理(如Vuex)来监听页面状态的变化,并在需要时执行相应操作。

希望这些示例和解释能帮助你理解uni.switchTab在uni-app中的行为。

回到顶部