收藏
回答

是否可以根据自己的需要来关闭页面栈中的某些页面?

我的问题如下:

我从A页面访问B页面,B点击了按钮来到了登录页C,C经过判断条件直接返回B页面或者去往D页面,D绑定一些数据后返回B,


页面栈应该是【A,B,C,D】,我要从D返回B,并且返回后栈应该变成是【A,B】,目的是避免手势(或自带的返回键)回退到登录页,

使用navigateBack可以满足效果,但是我的页面有一些东西需要重载,比如组件内部的一些初始状态不会更新,因为是老项目,涉及的页面很多,没办法一个一个页面去调整,只能在登录后的代码逻辑中去统一处理,navigateTo直接入栈了,reLaunch会清空,redirectTo只能注销当前页面,

我也尝试在C和D中使用redirectTo,这样两个页面都不被推进页面栈,但是如果出现C到D页面的跳转,D将无法回退到C,产品是不同意的,

目前我是在wx.navigateBack的success回调中重新使用redirectTo,但是这种方法相当于进入了两次页面,感觉不友好,有没有其他的方法可以直接改变页面栈的历史数据,剔除C和D,这样我直接使用navigateTo重新进入就行了,回退也不会回到登录页了。


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

3 个回答

  • 胡不归
    胡不归
    2025-07-30
    onShow可以做到,不过上面也提到了原因,就是老项目,涉及页面太多,改的很麻烦,并且引入的某些组件创建时就初始化了一些内部状态,不仅要更新数据还要更新组件内部状态,C是登录页,D是微信授权的绑定页面,为了方便就想在这里一次性处理掉这个问题,,如果没有办法,那就只能使用navigateBack保持现状,碰到一个改一个了
    
    2025-07-30
    有用
    回复
  • showms
    showms
    2025-07-30

    不建议直接修改页面栈,容易出问题。

    组件内部的状态在onshow方法里面更新不行吗

    2025-07-30
    有用
    回复 3
    • 胡不归
      胡不归
      2025-07-30
      老项目,涉及的页面太多了,写在onshow里我也不知道写到啥时候了,CD两个页面是共用的,所以想在这里一劳永逸
      2025-07-30
      回复
    • showms
      showms
      2025-07-30回复胡不归
      是用的自定义组件?
      2025-07-30
      回复
    • 胡不归
      胡不归
      2025-08-08回复showms
      用到了很多自定义组件
      2025-08-08
      回复
  • 智能回答 智能回答 本次回答由AI生成
    2025-07-30
    有用
登录 后发表内容