近期遇到的一些问题:Vue 渲染/页面刷新空白/route.name undefined

48 阅读2分钟

问题一:

iOS WebView 中,单页应用链接 A,跳转链接 B,然后快速的前进后退,(偶现)会出现 B 后退到 A、A 页面图片不显示的问题。

其中 A 页面:读取项目中的 JSON,渲染数据,图片来自项目。

这个问题偶现,不容易复现。

问题二:

页面 A,到页面 B,疯狂 A <-> B 间前进后退切换,会出现 B 后退到 A、A 页面空白。

问题二延伸:

无关前进后退,分别对 A、B 页面进行刷新,也会出现空白的情况。


问题三:

路由信息变化过程:

进入活动中心:

beforeEach: to:route.path = /、route.name = Home

afterEach: before:route.path = /、route.name = undefined to:route.path = /、route.name = Home

页面刷新:

beforeEach: to:route.path = /2024、route.name = 2024

afterEach: before:route.path = /、route.name = undefined to:route.path = /2024、route.name = 2024

进入活动中心,在获取数据后(此时)进行页面跳转,有可能在 before 状态,因此无法进行跳转到菜单第一项。之后页面路由信息就算正常到 route.name = Home,也没有进行跳转的操作。(那此时可以在 App.vue 中 watch 啊??)

修改:

在全局路由守卫 afterEach 进行判断,进入首页时,进行跳转。要先获取菜单数据,在其中进行跳转,如果已有菜单数据,直接判断跳转。

修改2:

获取数据时进行跳转。 watch 侦听 route.name 变化,同时 newMenuData 要存在。


watch 时已经获取了数据,直接在 watch 中进行跳转

  1. newMenuData: xxx
  2. afterEach from: / undefined
  3. afterEach to : / Home
  4. module: undefined
  5. watch
  6. old route name:undefined
  7. new route name:Home
  8. watch 开始 router replace
  9. afterEach from:/ Home
  10. afterEach to :/2024
  11. module:2024
  12. old route name: Home
  13. new route name: 2024

watch 时还没获取到数据,在获取数据时进行跳转

  1. afterEach from:/ undefined
  2. afterEach to :/ Home
  3. module: undefined
  4. watch
  5. old route name: undefined
  6. new route name: Home
  7. newMenuData: xxx
  8. getAllEvents 开始 router replace
  9. afterEach from:/ Home
  10. afterEach to :/2024
  11. module:2024
  12. old route name: Home
  13. new route name: 2024

总结

只考虑 watch,watch 时跳转,路由 undefined -> Home 时,有可能还未获取到菜单数据 newMenuData;

只考虑获取数据时跳转,获取到数据时,有可能路由还是 undefined()

而结合使用,在获取数据时,即使路由可能还是 undefined,那么当变为 Home 时,watch 也能侦测到。

  1. 路由 undefined -> Home
  2. 接口获取到菜单数据

所以 1 先满足的时候,路由跳转在 2;反之 2 先满足的时候,路由跳转在 1。