收藏
回答

页面onTabItemTap与onShow的触发顺序

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 需求 onTabItemTap 客户端 iOS 6.6.7 2.1.0

期望

    onTabItemTap内执行A操作

    onShow内执行B操作

    期望执行的顺序是 A -> B


问题:发现onTabItemTap的触发是在onShow之后,会变成 B -> A


尝试解决

    不过这样是否能保证 A -> B 的执行顺序呢

Page({
    onTabItemTap() {
        // 执行A操作
    },
    onShow() {
        setTimeout(() => {
             // 执行B操作   
        }, 10) 
    }
})




回答关注问题邀请回答
收藏

3 个回答

  • 金字塔里有拖孩
    金字塔里有拖孩
    2022-12-24

    tabbar页面: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一定是全部,之前的需求还能满足,于是写代码,操作了一番,成了,页面加载也通畅。

    2022-12-24
    有用
    回复
  • 箩灬卟
    箩灬卟
    2018-08-28

    个人觉得延时不安全。可以用Promise对像进行异步回调,A操作完成后再A的回调中执行B操作


    2018-08-28
    有用
    回复
  • xxx、defined
    xxx、defined
    2018-06-28

    这个顺序不合理啊,我理解应该onShow是最后啊

    2018-06-28
    有用
    回复
登录 后发表内容