当前位置: 首页 > news >正文

uniapp + Vue2 + Vuex + 持久化存储

1. 简介

本文档介绍了如何在 uniapp 中使用 Vue2Vuex 实现模块化状态管理,并使用 vuex-persistedstate 插件来进行持久化存储,确保状态在应用重新加载后能够持久化保存。

2. 项目结构

在我们的项目中,Vuex 被用来管理全局状态,vuex-persistedstate 用来保持状态的持久化存储。项目中的 Vuex 状态被分成多个模块,每个模块具有自己的状态、mutationsactions

2.1 目录结构
src/├── store/│    ├── modules/│    │   ├── counter.js│    │   └── userInfo.js│    └── store.js└── App.vue
3. 主要代码解析
3.1 store/store.js — 主入口
import Vue from 'vue';
import Vuex from 'vuex';
import counter from './modules/counter'; // 引入模块文件
import userInfo from './modules/userInfo'; // 引入模块文件
import createPersistedState from 'vuex-persistedstate'; // 引入持久化插件Vue.use(Vuex); // 使用 Vuex 插件const store = new Vuex.Store({modules: {counter, // 注册计数模块userInfo, // 注册用户信息模块},plugins: [createPersistedState({storage: {getItem: (key) => uni.getStorageSync(key), // 从本地存储获取数据setItem: (key, value) => uni.setStorageSync(key, value), // 将数据存储到本地removeItem: (key) => uni.removeStorageSync(key), // 删除本地存储数据},paths: ['counter', 'userInfo'], // 指定持久化的模块,这里持久化 counter 和 userInfo 模块}),],
});export default store;
  • Vuex.Store 创建了一个 Vuex 仓库,包含了 counteruserInfo 两个模块。

  • createPersistedState 是持久化插件,用于让 Vuex 的状态在页面刷新后依然保持不变。

  • paths 属性用于指定哪些模块的数据需要被持久化。

3.2 store/modules/counter.js — 计数模块
export default {namespaced: true, // 启用模块化命名空间state: {count: 10, // 初始值},mutations: {increment(state) {state.count++; // 计数加1},decrement(state) {state.count--; // 计数减1},},actions: {increment({ commit }) {commit('increment'); // 调用 mutation 来增加计数},decrement({ commit }) {commit('decrement'); // 调用 mutation 来减少计数},},
};
  • 该模块负责管理 count 状态,提供 incrementdecrement 变更方法。

  • namespaced: true 使得模块化命名空间生效,确保各个模块的 mutationaction 名称不会冲突。

3.3 store/modules/userInfo.js — 用户信息模块
export default {namespaced: true, // 启用模块化命名空间state: {count: 10, // 示例字段},mutations: {increment(state) {state.count++; // 计数加1},decrement(state) {state.count--; // 计数减1},},actions: {increment({ commit }) {commit('increment'); // 调用 mutation 来增加计数},decrement({ commit }) {commit('decrement'); // 调用 mutation 来减少计数},},
};

main.js

// #ifndef VUE3
import Vue from 'vue';
import App from './App';Vue.config.productionTip = false;
import store from './store/index'; // 引入store文件
App.mpType = 'app';const app = new Vue({...App,store,
});
app.$mount();
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue';
import App from './App.vue';
export function createApp() {const app = createSSRApp(App);return {app,};
}
// #endif

4. 在组件中使用 Vuex
4.1 引入并使用 Vuex 状态

在组件中,你可以通过 this.$store.state 来访问状态,或通过 this.$store.commit()this.$store.dispatch() 来触发 mutationsactions

<template><view><text>当前计数: {{ count }}</text><button @click="increment">增加</button><button @click="decrement">减少</button></view>
</template><script>
export default {computed: {// 通过 Vuex 获取计数count() {return this.$store.state.counter.count;},},methods: {increment() {// 提交 mutation 进行计数增加this.$store.dispatch('counter/increment');},decrement() {// 提交 mutation 进行计数减少this.$store.dispatch('counter/decrement');},},
};
</script>
  • computed 用于从 Vuex 获取状态,这里获取的是 counter 模块的 count

  • methods 中通过 dispatch 来触发 actions,例如调用 counter/increment 来增加计数。

4.2 使用持久化存储

vuex-persistedstate 插件会自动处理将 counteruserInfo 模块的状态保存到本地存储中。即使刷新页面,状态仍然能够保留。

5. 注意事项
  1. 命名空间:使用 namespaced: true 可以避免模块间命名冲突。如果不使用命名空间,需要在调用 mutationaction 时避免命名重复。

  2. 持久化存储:默认情况下,vuex-persistedstate 会将指定的模块保存到 localStorage 中。你可以根据需要自定义存储方式,例如使用 uni.setStorageSync

存储效果

http://www.dtcms.com/a/568930.html

相关文章:

  • 企业网站备案需要多久中文wordpress 主题
  • 香港 SFC 新规解读:虚拟资产交易平台迈向共享流动性与产品多元化时代
  • LegionSpace黑客松指南(一):项目开发流程指引
  • 网络注册公司怎么注册seo关键词推广价格
  • 阿拉伯语与中文对照词汇表PDF识别错误自动修正系统
  • 城市更新第一步:PDF转CAD,将历史图纸一键转化为设计复用底图
  • 矛盾论局事物本质内在逻辑洞察矛盾化解冲突拥抱矛盾智慧破局实战应用电子书籍PDF
  • 四层神经网络(含反向传播 Backpropagation)的完整数值计算+流程图示例
  • 第二部分(上):套接字
  • 深度学习Adam优化器核心概念全解析:参数,梯度,一阶动量,二阶动量
  • 网站模板哪里下载网站设计合同附件
  • 学习Linux——网络——网卡
  • 《原神》运行卡顿解决方案:游戏运行库合集一键安装指南
  • Java + Spring Boot + Redis技术栈,在实际使用缓存时遇到 缓存击穿、缓存穿透、缓存雪崩
  • Elasticsearch安装使用
  • 太原网站建设斯飞网络服务器wordpress
  • 知识图谱与黑盒大语言模型:生物医学研究的新突破
  • 不小心在idea中点了add 到版本控制 怎么样恢复?
  • 建网站空间的详细说明金华市有网站建设最低价
  • 服务器bmc功能
  • Linux Watchdog机制深度分析与实践指南
  • 在amazon linux 2023上面源码手动安装tesseract5.5.1
  • Linux---序列化与反序列化
  • 1.6.课设实验-数据结构-栈、队列-银行叫号系统2.0
  • 在amazon linux 2023上面通过Fedora 36软件仓库源安装tesseract5
  • seo网站做推广公司公司网站哪里好
  • 动态资源加载:不用Selenium,如何高效抓取Ajax和SPA网站?
  • 7.【NXP 号令者RT1052】开发——实战-串口通信
  • CANoe学习(二)使用CANdb++制作dbc
  • Node.js Buffer:深入理解与高效使用