Nuxt引入vue-persistedstate以及踩坑记录

 更新时间:2023年10月11日 10:41:06   作者:小白白哦(๑•̀ㅂ•́)و  
这篇文章主要介绍了Nuxt引入vue-persistedstate以及踩坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

项目需求,需要vuex进行路由持久化保存,结合nuxt框架进行记录。

思路

监听数据变化, 每当登录完毕,

vuex 数据发生变化,就要将数据保存到浏览器 本地 (指用户浏览器localStorage)

页面打开时, 会尝试将之前保存过的数据恢复到 vuex 当中即可

有点复杂, 找个插件帮忙

实现缓存信息到本地

nuxtjsstore不能直接使用浏览器的lcoalStorage方法,

而且自己写数据同步功能比较麻烦,

所以我们需要依赖一个插件vuex-persistedstate,该插件会把本地存储的数据存储到store

引入方法

1.安装

npm install vuex-persistedstate  --save

nuxt.config.js配置文件

plugins: [
    '@/plugins/element-ui',
    // '@/plugins/localStorage'
    // 这里的引入, 如果是普通字符串, 就在服务端马上运行
    // 如果是要等到浏览器再运行的代码可以将配置改为对象, 并且 路径作为 src 传进去
    {
      src: '@/plugins/localStorage',
      // 如果只在浏览器加载的代码, 可以添加一个 属性 ssr: false
      ssr: false
    }
  ],

plugins/localStorage.js

console.log('测试自定义插件')
// 在这个自定义插件中配置 vuex-persistedstate
import createPersistedState from 'vuex-persistedstate'
// 这里什么都可以写, 不过如果你需要用到 nuxt 本身, 必须通过 export 的方式暴露函数来接收
export default ({store}) => {
    // 如果想要等到 nuxt 加载完毕
    // 再执行代码, 有一个函数叫做 window.onNuxtReady()
    window.onNuxtReady(()=>{
        createPersistedState({
            // 在这里其实, 是想要将 vuex 数据存放到 localStorage 里面
            key: 'store'
        })(store)
    })
}

2.使用

store/index.js

// 用户管理
export const state = () => ({
    //采用接口返回的数据结构
    userInfo: {
        // token: '',
        // user: {}
    }
})
// 测试
// export const state = () => {
//     return {
//         // 这里是全局状态数据保存的地方
//         abc: 123
//     }
// }
// 修改 state 里面的数据, 必须使用 mutations 里面的函数
export const mutations = {
    // 每个属性都是一个函数, 作为修改 state 的方法
    // setAbc(state, data) {
    // 每个 mutation 函数都可以接受到两个参数
    // 第一个是 state 对象本身
    // 第二是调用函数时额外添加的数据
    // 这里需要做的就是改变 state 数据
    // state.abc = data
    // 这样外面调用这个函数, 并且传入数据, 即可改变当前的 abc 属性
    setUserInfo(state, data) {
        state.userInfo = data
    }
};

项目中需要存储的地方:

 //将结果发送到刚刚新建的vuex中,存储,实现状态持久化,不然刷新之后数据就没了
 this.$store.commit('userstore/setUserInfo',res.data)

项目中需要使用的地方:

computed:{
        userInfo(){
            return this.$store.state.userstore.userInfo
        }
    },
    ----------渲染头像-----------------
     <el-dropdown v-if="userInfo.token">
     <img :src="baseURL+userInfo.user.defaultAvatar"/>
        {{userInfo.user.nickname}}

修改完后重新启动项目即可。

3.踩坑

引入后可能出现window is not defined 问题:

  • 检查nuxt.config.js中是否将ssr置为false
  • 将nuxt.config.js中mode设置为’spa’

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现搜索并高亮文字的两种方式总结

    vue实现搜索并高亮文字的两种方式总结

    在做文字处理的项目时经常会遇到搜索文字并高亮的需求,常见的实现方式有插入标签和贴标签两种,这两种方式适用于不同的场景,各有优劣,下面我们就来看看他们的具体实现吧
    2023-11-11
  • 详解如何在vue项目中设置首页

    详解如何在vue项目中设置首页

    这篇文章主要给大家介绍如何在vue项目中设置首页,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • vue+springboot实现图形验证码Kaptcha的示例

    vue+springboot实现图形验证码Kaptcha的示例

    图形验证码是做网站常用的功能,本文主要介绍了vue+springboot实现图形验证码Kaptcha的示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Vue判断字符串(或数组)中是否包含某个元素的多种方法

    Vue判断字符串(或数组)中是否包含某个元素的多种方法

    在我们前端日常开发中经常会遇到判断一个字符串中是否包含某个元素的需求,下面这篇文章主要给大家介绍了关于Vue判断字符串(或数组)中是否包含某个元素的多种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 图片预览插件vue-photo-preview的使用示例详解

    图片预览插件vue-photo-preview的使用示例详解

    这篇文章主要介绍了图片预览插件vue-photo-preview的使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 解决element-ui中Popconfirm气泡确认框的事件不生效问题

    解决element-ui中Popconfirm气泡确认框的事件不生效问题

    这篇文章主要介绍了解决element-ui中Popconfirm气泡确认框的事件不生效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue-cli+webpack记事本项目创建

    vue-cli+webpack记事本项目创建

    这篇文章主要为大家详细介绍了vue-cli+webpack创建记事本项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Vue 组件注册实例详解

    Vue 组件注册实例详解

    这篇文章主要介绍了Vue 组件注册,结合实例形式较为详细的分析了vue.js组件的常见分类、注册方法及相关操作注意事项,需要的朋友可以参考下
    2019-02-02
  • Vue项目中数据的深度监听或对象属性的监听实例

    Vue项目中数据的深度监听或对象属性的监听实例

    这篇文章主要介绍了Vue项目中数据的深度监听或对象属性的监听实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue 展示.md文件的方法详解

    Vue 展示.md文件的方法详解

    这篇文章主要介绍了Vue 展示.md文件的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论