都2023年了,还会遇到这个问题,刚开始自定义了 tabbar,客户说刷新小程序点击其他导航会闪退到首页,找了半天没找到原因,于是重构了页面,把所有tabbar页面都当成组件放到一个页面里,于是兴高采烈的再次试一试,发现刷新会重载2次页面,app.vue里的生命周期执行2次.....有没有大佬知道怎么解决?
跳转页面,页面会重复打开两次代码正常运行,使用uniapp开发的微信小程序,navigateTo简单的路由跳转,到达指定页面后页面会被打开两次。 经过测试安卓手机才会出现,苹果手机跳转正常。
2023-07-02tabbar页面:home , order , my三个页面, order页面顶部有 全部,开发中,已完成三种状态,暂且叫A,B,C, current分别是'',1,2 my页面有A,B,C三个跳转到order页面的按钮,跳转之前将状态current存进app.globalData中, order页面的onShow每次获取app.globalData赋值给data里的current,然后请求列表,每次点击A,B,C按钮 再将点击的current分别存进app.globalData和data里然后请求列表,这样有个好处,点击列表查看详情在返回列表页面,顶部的状态会锁定,但是又出现另外一种情况,假设锁定在B上,点击home和my的tabbar,再进入order页面,不是从A开始默认查询的,还是刚才的状态,这是因为app.globalData没有赋值为'' ,那有没有监听tabbar的方法那,于是找到了onTabItemTap方法,但是这个方法比onShow后执行,也就是说进入到order页面app.globalData赋值为'',也没有onShow里app.globalData赋值早,这里就比较崩溃,那能不能用await和promise方法那,让onTabItemTap执行完再执行onshow里的方法,这里又出现一个新的问题 await onTabItemTap() 这里的参数没有,导致下面onTabItemTap(item)的item.index 为undefined,那行吧,我不加参数,你会发现onTabItemTap执行了2次,一次onshow里的await调用,一次默认的,这很不友好。于是换成在onshow里加settimeout,延迟执行onshow里的方法,即使设置成20毫秒,依然觉得页面的显示不顺畅,就是延迟造成的,这里就很崩溃了,想砸键盘。闭目养神了一会,把流程再想了一遍,如果是从my页面进入有没有其他办法,发现不行,只有onTabItemTap可行, 灵光一现,不管当前current处在什么状态,如果点击tabbar.页面进入home和my页面,在这几个页面里加onTabItemTap,然后把app.globalData赋值为全部不就解决了吗,这样点击tabbar进入order一定是全部,之前的需求还能满足,于是写代码,操作了一番,成了,页面加载也通畅。
页面onTabItemTap与onShow的触发顺序期望: onTabItemTap内执行A操作 onShow内执行B操作 期望执行的顺序是 A -> B 问题:发现onTabItemTap的触发是在onShow之后,会变成 B -> A 尝试解决: 不过这样是否能保证 A -> B 的执行顺序呢? [代码]Page({[代码][代码] [代码][代码]onTabItemTap() {[代码][代码] [代码][代码]// 执行A操作[代码][代码] [代码][代码]},[代码][代码] [代码][代码]onShow() {[代码][代码] [代码][代码]setTimeout(() => {[代码][代码] [代码][代码]// 执行B操作 [代码][代码] [代码][代码]}, 10) [代码][代码] [代码][代码]}[代码][代码]})[代码]
2022-12-24