Vue:vuex状态数据持久化插件vuex-persistedstate

举报
彭世瑜 发表于 2021/08/13 22:24:43 2021/08/13
【摘要】 Vue项目使用Vuex保存全局状态。Vuex默认是存储到内存中,如果刷新浏览器状态就会重置。这就需要持久化状态数据。 不过,需要注意的是,有一些数据并不需要持久化。 文档: Vue CLIvuexvuex-persistedstatejs-cookie 项目结构 # 项目结构 $ tree . ├── package.json ├── main.js ├──...

Vue项目使用Vuex保存全局状态。Vuex默认是存储到内存中,如果刷新浏览器状态就会重置。这就需要持久化状态数据。

不过,需要注意的是,有一些数据并不需要持久化。

文档:

  1. Vue CLI
  2. vuex
  3. vuex-persistedstate
  4. js-cookie

项目结构

# 项目结构
$ tree 
.
├── package.json
├── main.js
├── App.vue
└── store ├── cookie-storage.js ├── index.js └── persistedstate.js

# 快速原型开发
$ vue serve

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

代码

依赖 package.json

{
  "dependencies": { "js-cookie": "^2.2.1", "vue": "^2.6.12", "vuex": "^3.6.2", "vuex-persistedstate": "^4.0.0-beta.3"
  }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

程序入口 main.js

import Vue from "vue";
import App from "./App.vue";
import store from "./store";

const app = new Vue({
  el: "#app",
  store: store,
  render: (h) => h(App),
});

export default app;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

组件 App.vue

<template>
  <div class=""> <input type="text" v-model="name" >
  </div>
</template>

<script>
export default {
  name: '', computed: { name: { get() { // 取出数据 return this.$store.getters.name; }, set(val) { // 更新数据 this.$store.dispatch('setName', val); }, },
  },
};
</script>

<style lang="scss" scoped>
</style>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Vuex组件入口 store/index.js

import persistedState from "./persistedstate";
import Vuex from "vuex";
import Vue from "vue";

Vue.use(Vuex);

const store = new Vuex.Store({
  // 数据状态
  state: { name: "" }, // 获取 getter
  getters: { name: (state) => { console.log("getters.name"); return state.name; },
  }, // 同步 setter
  mutations: { setName(state, name) { console.log("mutations.setName"); state.name = name; },
  }, // 异步 setter
  actions: { setName({ commit }, name) { console.log("actions.setName"); commit("setName", name); },
  }, // 持久化插件 
  plugins: [persistedState],
});

export default store;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

持久化插件 store/persistedstate.js

import createPersistedState from "vuex-persistedstate";
import CookieStorage from "./cookie-storage.js";

const persistedState = createPersistedState({
  // 默认存储到localStorage
  //   storage: window.localStorage // 存储到cookie
  storage: CookieStorage,
});

export default persistedState;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

自定义持久化存储 store/cookie-storage.js

import Cookies from "js-cookie";

const CookieStorage = {
  getItem: (key) => Cookies.get(key),
  setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
  removeItem: (key) => Cookies.remove(key),
};

export default CookieStorage;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/113939702

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。