Vue3缓存两种:路由缓存与Pinia状态缓存

Vue3缓存两种:路由缓存与Pinia状态缓存

单页应用中,最令人头疼的就是页面刷新或者回退时,数据丢失或重新加载的问题。本文以微小demo介绍两种缓存以应付Vue3项目中的绝大多数需要缓存的业务。

路由缓存

一个令人头疼的问题是,当路由后退或原地刷新时,组件的生命周期会被重新触发,即可能导致生命周期钩子中加载数据的函数被触发,为了避免这种情况,可以利用Vue-Router的路由缓存机制。以一个文章列表为例,假设你点击了一篇文章进行阅读,并希望返回时不要重载数据或触发生命周期钩子,你可以在router配置中,为文章列表页面的meta选项加上keepAlive属性,并设置为true:

{
        path : '/articleList',
        name : 'articleList',
        component: ()=>import('@/view/article/ArticleListView.vue'),
        meta: { keepAlive:true } // 此处添加
}

然后找到router-view组件,并对其进行改写:

 <router-view v-slot="{ Component }">
    <keep-alive>
      <component :is="Component"  v-if="$route.meta.keepAlive"/>
    </keep-alive>
    <component :is="Component"  v-if="!$route.meta.keepAlive"/>
  </router-view>

这样就完成了对文章列表页面的缓存。如果你需要为其他页面进行缓存,则可以按需为其路由配置keepAlive属性

Pinia状态缓存

一种场景是,我们有一行Type标签,点击其可以加载不同分类下的文章列表,而这个Type会被我们纳入状态管理。一个尴尬的事实是,当页面刷新或者路由回退时,Type也随之被重置,丢失了原来的状态。为此,可以使用Pinia的额外插件,实现其缓存:

npm i pinia-plugin-persist --save

安装完成后,在main.js文件中,进行如下配置:

import { createPinia } from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist' // 注意此处

const pinia = createPinia()
pinia.use(piniaPluginPersist)  // 注意此处

const app = createApp(App)
app.use(pinia)

然后回到我们的store.js中进行配置,假设针对Type进行状态管理并缓存,可以配置其persist选项下的enabled属性为true:

export const useNowTypeStore = defineStore('nowType', () => {
        const nowType = ref(0)

        function setNowType(realType) {
            nowType.value = realType
        }

        return {nowType, setNowType}
    }, {
        persist: {
            enabled: true
        }
    } // 注意此处
)

这样就完成了对NowType的缓存。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 Pinia可以实现缓存未提交的表单数据,让用户下次进来可以继续编辑。通过使用Pinia作为Vue3的状态管理工具,我们可以更好地适配Vue3。当用户在表单页面填写了很多信息但没有保存就退出时,Pinia可以记录用户填写的信息,以便下次用户进来时还能够看到之前填写的内容。这样可以提升用户的体验。 具体实现这个功能的代码可以参考以下代码示例: ```javascript // 在适当的地方引入Pinia并创建一个store实例 import { createPinia } from 'pinia' const pinia = createPinia() // 定义一个表单数据的store模块 p<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue3+pinia 实现缓存未提交的表单数据,下次进来可以继续编辑](https://blog.csdn.net/m0_55681803/article/details/125006275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [基于SpringBoot+Vue开发的个人博客系统](https://download.csdn.net/download/zy_dreamer/87902105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值