vue 初次进入页面时,怎么区分created跟activated?

近猪0_0者吃
  • 1
北京新手上路,请多包涵

因为使用的组件缓存功能,页面初次进入时,created跟activated都会触发,我在这两个钩子函数中都请求了列表数据,所以初次进入页面时,会调用两次列表数据的接口

 现在有两个问题
1、如果我把created中请求列表数据的调用去掉的话,浏览器点击刷新时,activated也不会调用,列表就会显示无数据
2、如果去除activated中的列表接口调用的话,其他页面返回时,就不会刷新列表

有没有一个好的办法,可以完美处理这种请求
(我有写过一个变量,每次进入一次页面就+1,通过变量值来判断,但是页面有点多,这个方法有点笨,有没有大佬有好的办法!)

回复
阅读 925
4 个回答

可以搞个 isRequesting 变量作为请求状态,如果已经在调用中,后续多次调用就直接 return 掉了。

async fetchData(page = 1) {
  if (this.isRequesting) return;
  this.isRequesting = true;
  // ...请求代码
  this.isRequesting = false;
}

不过核心问题是:你浏览器点击刷新时,activated 为什么不会调用?
可能这个页面是你的某个子组件,外面并没有套 keep-alive ?光在顶层路由套一个是不行。

created跟activated只会触发一个。两个都触发的话,只能说你这个页面早就被缓存了。
检查一下keep-alive缓存是否指定了name, 如果未指定,那么其他页面有用到你缓存的这个组件的话,会造成缓存混乱。

fetchData用防抖函数包装下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏