Skip to content

H5 taro router 重定向导致 页面栈丢失 #15994

@metaPigeon

Description

@metaPigeon

相关平台

H5

浏览器版本: Chrome 最新
使用框架: React

复现步骤

假设 页面栈 是如下:

const stacks = ['pageA', 'pageB', 'pageC', 'pageD', 'pageB']
Taro.redirectTo({
     url: pageB
})

这时页面会丢失栈,stacks 变成 ['pageA', 'pageB']

期望结果

重定向跳转页面不丢失栈

实际结果

重定向跳转页面丢失栈

环境信息

  Taro CLI 3.6.28 environment info:
    System:
      OS: macOS 14.4
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 18.20.2 - ~/.nvm/versions/node/v18.20.2/bin/node
      Yarn: 1.22.22 - ~/.nvm/versions/node/v18.20.2/bin/yarn
      npm: 10.5.0 - ~/.nvm/versions/node/v18.20.2/bin/npm
    npmPackages:
      @tarojs/cli: 3.6.28 => 3.6.28 
      @tarojs/components: 3.6.28 => 3.6.28 
      @tarojs/helper: 3.6.28 => 3.6.28 
      @tarojs/plugin-framework-react: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-alipay: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-h5: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-jd: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-qq: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-swan: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-tt: 3.6.28 => 3.6.28 
      @tarojs/plugin-platform-weapp: 3.6.28 => 3.6.28 
      @tarojs/react: 3.6.28 => 3.6.28 
      @tarojs/router: ^3.6.28 => 3.6.28 
      @tarojs/runtime: 3.6.28 => 3.6.28 
      @tarojs/shared: 3.6.28 => 3.6.28 
      @tarojs/taro: 3.6.28 => 3.6.28 
      @tarojs/taro-loader: 3.6.28 => 3.6.28 
      @tarojs/webpack5-runner: 3.6.28 => 3.6.28 
      babel-preset-taro: 3.6.28 => 3.6.28 
      eslint-config-taro: 3.6.28 => 3.6.28 
      react: ^18.0.0 => 18.3.1

补充信息

看了源码是下面问题导致:
packages/taro-router/src/router/stack.ts

  // 获取最近页面index 是从1 开始遍历,
  getLastIndex (pathname: string, stateWith = 1) {
    const list = [...this.stacks].reverse()
    return list.findIndex((page, i) => i >= stateWith && page.path?.replace(/\?.*/g, '') === pathname)
  }

请教为什么从1 开始,改成0 就没这个问题

Metadata

Metadata

Assignees

No one assigned

    Labels

    F-reactFramework - ReactT-h5Target - 编译到 H5V-3Version - 3.x

    Type

    No type

    Projects

    Status

    Padding

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions