lblblong / tarojs-router-next

Taro 小程序路由库/自动生成带参数类型提示的路由方法/允许传递任意类型、任意大小的参数数据/同步的路由方法调用/koa体验一致的路由中间件
https://lblblong.github.io/tarojs-router-next/
MIT License
248 stars 23 forks source link

back 方法没有页面回退时如何自定义返回页面? #48

Open virzs opened 2 years ago

virzs commented 2 years ago
image

h5 端跳转外部网页后返回,会提示没有页面回退,这个如何解决呢?

lblblong commented 2 years ago

可以提供一下当前 taro 和 tarojs-router-next 的版本信息吗,我这边尝试复现一下

virzs commented 2 years ago

可以提供一下当前 taro 和 tarojs-router-next 的版本信息吗,我这边尝试复现一下

"@tarojs/taro": "3.4.4", "tarojs-router-next": "^2.8.1",

因为现在要在微信中打开网页,所以就会出现这样的情况,另外开发时如果浏览器刷新,也会提示这个错误

lblblong commented 2 years ago

这个其实是 Taro 为了统一 h5 和小程序体验导致的问题,在小程序里是可以保证页面栈不被破坏的,因为没有刷新按钮,但是在 h5 里面不行,用户刷新一下页面栈(taro 维护的页面栈)就只剩一个了,再调用 back 方法返回的时候就没有页面可以回退了

要解决这个问题其实你可以包装一下 back 方法,比如下面这样:

const originBack = Router.back
Router.back = function (...args) {
  try {
    return originBack(...args)
  } catch (err) {
    if (err instanceof NoPageException) {
      // 在这里处理没有页面回退的情况,比如跳转到首页
      Router.toHome()
    }
  }
}
virzs commented 2 years ago

这个其实是 Taro 为了统一 h5 和小程序体验导致的问题,在小程序里是可以保证页面栈不被破坏的,因为没有刷新按钮,但是在 h5 里面不行,用户刷新一下页面栈(taro 维护的页面栈)就只剩一个了,再调用 back 方法返回的时候就没有页面可以回退了

要解决这个问题其实你可以包装一下 back 方法,比如下面这样:

const originBack = Router.back
Router.back = function (...args) {
  try {
    return originBack(...args)
  } catch (err) {
    if (err instanceof NoPageException) {
      // 在这里处理没有页面回退的情况,比如跳转到首页
      Router.toHome()
    }
  }
}

感谢,一时间没想到还能这么写,back方法添加一个默认返回路径参数会不会更友好一点?