uni-app uni.setTabBarItem连续调用两次时报错

uni-app uni.setTabBarItem连续调用两次时报错

示例代码:

onLaunch: function() {  
    uni.setTabBarItem({  
        index:2,  
        pagePath:'/pages/user/login'  
    })  
    uni.setTabBarItem({  
        index:3,  
        pagePath:'/pages/user/login'  
    })  
}

操作步骤:

参考代码示例

预期结果:

不应该有报错

实际结果:

有报错

bug描述:

业务逻辑是这样的:应用未登录时 把 tabbar 中的后两个(‘订单’和’个人中心’)的pagePath (跳转路径)都设置为登录页 然后H5端报错如下
此时每次点击tabbar时都会报错 但是不影响操作
不设置为同一个页面时报错消失
渲染方式是纯nvue项目(renderer=naive)
注:代码示例里面是部分代码,实测结果与项目里一致

Image

信息类别 详情
产品分类 uniapp/H5
PC开发环境 Windows
PC开发环境版本 win10
HBuilderX类型 正式
HBuilderX版本 3.1.2
浏览器平台 Chrome
项目创建方式 HBuilderX

更多关于uni-app uni.setTabBarItem连续调用两次时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在H5上,tabbar是使用循环渲染的。使用的key值为pagePath(页面路径)。如果有两个key值,既tabbar中有重复的pagepath,vue就会报这个错。

更多关于uni-app uni.setTabBarItem连续调用两次时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个报错是因为在H5端连续调用uni.setTabBarItem设置相同pagePath时导致的冲突。问题出在H5端的tabbar实现机制上。

解决方法有两种:

  1. 使用setTimeout延迟第二次调用:
onLaunch: function() {
    uni.setTabBarItem({
        index:2,
        pagePath:'/pages/user/login'
    })
    setTimeout(() => {
        uni.setTabBarItem({
            index:3,
            pagePath:'/pages/user/login'
        })
    }, 100)
}
  1. 使用不同的pagePath但指向同一个页面:
onLaunch: function() {
    uni.setTabBarItem({
        index:2,
        pagePath:'/pages/user/login?from=tab2'
    })
    uni.setTabBarItem({
        index:3,
        pagePath:'/pages/user/login?from=tab3'
    })
}
回到顶部