uniapp中使用vuex并持久化的方法示例

 更新时间:2023年06月20日 12:02:00   作者:卷毛十口  
vuex是基于vuex.js的状态管理工具,可以把它理解为一个仓库,下面这篇文章主要给大家介绍了关于uniapp中如何使用vuex并持久化的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

准备

根目录下创建store文件夹,内部创建index.js

一、插件实现

地址:vuex-persistedstate - npm

1.安装插件

代码如下(示例):

npm install --save vuex-persistedstate

2.index.js配置:

import api from '@/static/api/index.js' // 引入接口
import createPersistedState from 'vuex-persistedstate' // 引入数据持久化插件
import Vue from 'vue' // 导入vue包
import Vuex from 'vuex' // 导入vuex包
Vue.use(Vuex); // vue的插件机制使用vuex
 
 
// 创建Vuex:构造函数创建store常量
const store = new Vuex.Store({
	// state:提供唯一的公共数据源,所有共享的数据都要统一放到store中的state存储
	state: {
		// 持久化常用参数
		token: uni.getStorageSync('vuex').token, // token
		userId: uni.getStorageSync('vuex').userId, // 用户id
	},
 
 
	// mutations 同步变更state数据,传多个参数需要用对象的方式
	mutations: {
		// 保存TOKEN
		SET_TOKEN: (state, token) => {
			state.token = token
		},
 
		// 保存用户ID
		SET_ID: (state, id) => {
			state.userId = id
		},
 
		// 定义全局的清理方法
		RESET_ALL_STATE(state) {
			state.token = '';
			state.userId = '';
		},
	},
 
	// actions 异步变更state数据
	actions: {
		// 登陆,持久化存储token,id
		loginApi(context, data) {
			return new Promise((resolve, reject) => {
				api.userLogin(data).then(res => {
					const {
						token,
						user_id,
					} = res.data
 
					context.commit('SET_ID', id)
                    context.commit('SET_TOKEN', token)  
				}).catch(err => {
					reject(err)
				})
			})
		},
 
 
		// 退出登陆清空state
		logout(context) {
			return new Promise((resolve, reject) => {
				context.commit('RESET_ALL_STATE')
			})
		}
	},
 
 
	// getters 用于对store中的已有数据进行加工处理形成新的数据,如果store中的数据发生变化,
	getters: {},
 
	// plugins 插件配置
	plugins: [
		createPersistedState({
			paths: ['token', 'userId'],
			storage: { // 存储方式定义  
				getItem: (key) => uni.getStorageSync(key), // 获取  
				setItem: (key, value) => uni.setStorageSync(key, value), // 存储  
				removeItem: (key) => uni.removeStorageSync(key) // 删除  
			}
		})
	]
})
 
export default store

插件的api说明:

  • key: 存储持久状态的key(默认vuex)
  • reduce: 存储持久状态的key(默认vuex)
  • paths :部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])
  • reducer :一个函数,将被调用来基于给定的路径持久化的状态。默认包含这些值。
  • subscriber :一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)
  • storage :而不是(或与)getState和setState。默认为localStorage。
  • getState :将被调用以重新水化先前持久状态的函数。默认使用storage。
  • setState :将被调用来保持给定状态的函数。默认使用storage。
  • filter :将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true

3.获取持久化数据(比如登录页):

login() {
    this.$store.dispatch('loginApi', data).then(res => {
		uni.reLaunch({
			url: '/pages/index/index'
		});
	})
}

4.使用state(比如个人主页):

<template>
	<view>
		<text>{{id}}</text> 
	</view>
</template>
<script>
	import {mapState} from 'vuex'
	export default {
		data() {
			return {}
		},
		computed: {
			...mapState(["id"),
		},
	}
</script>

二、本地存储实现

代码如下(示例):

import api from '@/static/api/index.js' // 引入接口
import createPersistedState from 'vuex-persistedstate' // 引入数据持久化插件
import Vue from 'vue' // 导入vue包
import Vuex from 'vuex' // 导入vuex包
Vue.use(Vuex); // vue的插件机制使用vuex
 
const store = new Vuex.Store({
	// state:提供唯一的公共数据源,所有共享的数据都要统一放到store中的state存储
	state: {
		// 持久化
		test: uni.getStorageSync('test'),
	},
 
 
	// mutations 同步变更state数据,传多个参数需要用对象的方式
	mutations: {
        // 也可以用 JSON.parse(JSON.stringify(test))
		SET_TEST: (state, test) => {
			state.test = test
			uni.setStorageSync('test', state.test)
		}
	},
 
	// actions 异步变更state数据
	actions: {
		// 持久化实现
		getTest(context, test) {
			context.commit('SET_TEST', test)
		}
	},
 
 
	// getters 用于对store中的已有数据进行加工处理形成新的数据,如果store中的数据发生变化,
	getters: {}
})
 
export default store

总结

本文仅仅简单介绍了vuex持久化的使用,插件或者本地缓存两种方式

到此这篇关于uniapp中使用vuex并持久化的文章就介绍到这了,更多相关uniapp使用vuex并持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你搞懂面试率超高的JS事件循环

    一文带你搞懂面试率超高的JS事件循环

    事件循环是 JavaScript 中一个非常重要的概念,下面就来看看浏览器和 Node.js 中的事件循环的原理,以及两者之间的差异,感兴趣的可以了解一下
    2022-10-10
  • JavaScript实现ArrayBuffer到Base64的转换

    JavaScript实现ArrayBuffer到Base64的转换

    本文探讨了在 JavaScript 中将 ArrayBuffer 转换为 Base64 字符串时遇到的栈溢出问题,并提供了几种实用的解决方案,我们将通过生动的比喻来解释相关概念,比较不同方法的性能和兼容性,最终提供一个平衡而实用的方法,需要的朋友可以参考下
    2024-10-10
  • JavaScript canvas动画实现时钟效果

    JavaScript canvas动画实现时钟效果

    这篇文章主要为大家详细介绍了JavaScript canvas动画实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Json按某个键的值进行排序

    Json按某个键的值进行排序

    这篇文章主要介绍了json按某个键的值进行排序的相关资料,代码简单易懂,非常不错,需要的朋友可以参考下
    2016-12-12
  • 基于Three.js插件制作360度全景图

    基于Three.js插件制作360度全景图

    这篇文章主要介绍了基于Three.js插件制作的360度全景图,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • js实现同一个页面多个渐变效果的方法

    js实现同一个页面多个渐变效果的方法

    这篇文章主要介绍了js实现同一个页面多个渐变效果的方法,涉及javascript操作渐变效果的实现技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • IE iframe的onload方法分析小结

    IE iframe的onload方法分析小结

    在判断 iframe 是否加载完成的完美方法一文中,怿飞最后有如下两点补充。
    2010-01-01
  • 纯js实现画一棵树的示例

    纯js实现画一棵树的示例

    下面小编就为大家带来一篇纯js实现画一棵树的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 在页面加载之后执行JavaScript

    在页面加载之后执行JavaScript

    这篇文章主要介绍了在页面加载之后执行JavaScript的详细过程,本文通过实例代码文字解说给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb

    微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb

    这篇文章主要给大家介绍了关于微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb的相关资料,文中通过示例代码介绍的非常详细,需要的朋友参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07

最新评论