【Vue3】解决路由缓存问题(响应路由参数的变化)

官方文档解释:

解决问题的思路:

  1. 让组件实例不复用,强制销毁重建
  2. 监听路由变化,变化之后执行数据更新操作

方案一:给router-view添加key

以当前路由完整路径为key 的值,给router-view组件绑定

<RouterView :key="$route.fullPath" />

所以添加 key之后会强制替换组件,重新发送所有请求(某些情况下不需要重新发送所有请求,会造成性能浪费),而非复用。

方案二:使用 beforeRouteUpdate 导航钩子

beforeRouteUpdate 钩子函数可以在每次路由更新之前执行,在回调中执行需要数据更新的业务逻辑即可。

这里只需要 getCategory 重新请求,而 getBanner 不重新请求。

注意点:这里 id 会变化,不传入则使用 默认id,使用 to 的目的在于获取将要到达路由的 params参数。又因为 onBeforeRouteUpdate 是在跳转之前就执行的钩子,所以只能通过 to 来获取即将到达的路由的参数。

js 复制代码
const getCategory = async (id = route.params.id) => {
  const res = await getCategoryAPI(id)
  categoryData.value = res.result
}

const getBanner = async () => {
  const res = await getBannerAPI({
    distributionSite: '2'
  })
  bannerList.value = res.result
}
onMounted(() => {
  getCategory()
  getBanner()
})

// 路由参数变化的时候,可以把分类数据接口重新发送
onBeforeRouteUpdate((to)=> {
  getCategory(to.params.id)
})
相关推荐
不惑_2 小时前
实战Redis与MySQL双写一致性的缓存模式
redis·mysql·缓存
day3ZY2 小时前
清理C盘缓存,电脑缓存清理怎么一键删除,操作简单的教程
c语言·开发语言·缓存
叫我DPT3 小时前
redis
数据库·redis·缓存
后端小张8 小时前
Redis 执行 Lua,能保证原子性吗?
数据库·redis·缓存
TravisBytes9 小时前
用户态缓存:高效数据交互与性能优化
缓存·性能优化
芊言芊语1 天前
分布式缓存服务Redis版解析与配置方式
redis·分布式·缓存
攻城狮的梦1 天前
redis集群模式连接
数据库·redis·缓存
无休居士1 天前
【实践】应用访问Redis突然超时怎么处理?
数据库·redis·缓存
.Net Core 爱好者1 天前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
M-bao1 天前
缓存数据和数据库数据一致性问题
数据库·缓存