阅读 161

缓存路由组件

理解

默认情况下, 被切换的路由组件对象会死亡释放, 再次回来时是重新创建的

如果可以缓存路由组件对象, 可以提高用户体验

解决方式

  1. 给router-view添加key属性

<router-view :key="$route.fullPath"/>  复制代码

router-view 添加key属性: 简单粗暴,类似于v-if:会销毁重建组件,有一定的性能损耗

  1. 使用watch监听id变化重新拉取接口

export default {   name: 'TopCategory',   components: { GoodsItem },   setup () {     console.log('setup。。。。。。。。。。。。')     // 轮播图     const sliders = ref([])     // findBanner().then(data => {     //   console.log('findBanner', data)     //   sliders.value = data.result     // })     // 分类数据     const route = useRoute()     const cate = ref({})     // findTopCategory(route.params.id).then(data => {     //   console.log('findTopCategory', data)     //   cate.value = data.result     // })     // 监听 route.params.id的变化     // watch(对象 | 数组 | 函数, (newVal, oldVal) => {}, { immediate: true | false, deep: true | false })     watch(() => route.params.id, (newVal) => {       console.log('route.params.id变化了...', newVal)       findBanner().then(data => {         console.log('findBanner', data)         sliders.value = data.result       })       findTopCategory(route.params.id).then(data => {         console.log('findTopCategory', data)         cate.value = data.result       })     }, { immediate: true })     return { sliders, cate }   } } </script> 复制代码

watch( route.param.id): 没有销毁重建。从更底层的方式(侦听响应式数据的变化)去切入重发请求

  1. 使用onBeforeRouteUpdate钩子函数

<script> import { onMounted, ref } from 'vue' import { findBanner } from '@/api/home.js' import { findTopCategory } from '@/api/category.js' import { useRoute, onBeforeRouteUpdate } from 'vue-router' import GoodsItem from './components/goods-item.vue' export default {   name: 'TopCategory',   components: { GoodsItem },   setup () {     // 轮播图     const sliders = ref([])     // 分类数据     const route = useRoute()     const cate = ref({})     const loadData = (id) => {       findBanner().then(data => {         console.log('findBanner', data)         sliders.value = data.result       })       findTopCategory(id).then(data => {         console.log('findTopCategory', data)         cate.value = data.result       })     }     // 只执行一次     onMounted(() => {       loadData(route.params.id)     })     // 路由变化时执行     // to: 要跳转的路由对象     onBeforeRouteUpdate((to) => {       console.log('onBeforeRouteUpdate...............', to)       loadData(to.params.id)     })     return { sliders, cate }   } } </script> 复制代码

onBeforeRouteUpdate : 没有销毁重建。理解更加自然


作者:墨染灬
链接:https://juejin.cn/post/6986935526888587271


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐