uniapp中使用vuex并持久化

这篇具有很好参考价值的文章主要介绍了uniapp中使用vuex并持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 目录

    文章目录

    准备

    一、插件实现

    1.安装插件

     2.index.js配置:

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

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

    二、本地存储实现

    总结


准备

根目录下创建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持久化的使用,插件或者本地缓存两种方式文章来源地址https://www.toymoban.com/news/detail-487528.html

到了这里,关于uniapp中使用vuex并持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)

    想要在 uniapp 里面使用 pinia-plugin-persistedstate 会遇到的问题就是 uniapp里面没有浏览器里面的 sessionStorage localStorage 这些 api 。 我们只需要替换掉 pinia-plugin-persistedstate 默认的储存 api 就可以了。使用 createPersistedState 重新创建一个实例, 把里面的 storage 的参数修改为对应的 uniapp

    2024年02月08日
    浏览(33)
  • uniapp项目实战第五章:小程序Pinia持久化

    说明:项目中 Pinia 用法平时完全一致,主要解决持久化插件 兼容性 问题。 持久化存储插件 持久化存储插件: pinia-plugin-persistedstate 插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API。 网页端持久化 API 多端持久化 API 参考代码 现在可以持续化了

    2024年02月01日
    浏览(43)
  • uniapp微信小程序开发踩坑日记:获取用户头像并持久化存储到后端服务器

    原来获取用户头像和昵称调用的是uni.getUserInfo(OBJECT)接口,但是2021年4月28日24时后发布的小程序新版本,无法通过uni.getUserInfo与button open-type=\\\"getUserInfo\\\"/获取用户个人信息(头像、昵称、性别与地区) 详细情况见官方文档:小程序登录、用户信息相关接口调整说明 | 微信开放社

    2024年04月14日
    浏览(44)
  • 【pinia持久化存储】使用pinia和pinia-plugin-persistedstate依赖进行数据的持久化存储

    使用pinia和pinia-plugin-persistedstate依赖进行数据的持久化存储。 存储方式 : localStorage sessionStorage pinia-plugin-persistedstate 中文官网 pinia 中文官网 安装和使用 pinia ,请参考使用pinia文章。 安装 pinia-plugin-persistedstate : 使用前先将 pinia-plugin-persistedstate添加到pinia实例上。 在添加的时

    2023年04月17日
    浏览(47)
  • ActiveMQ使用JDBC持久化消息

    为了避免服务器宕机而导致消息丢失,ActiveMQ提供消息持久化机制。 ActiveMQ提供多种消息持久化的方式,如LevelDB Store、KahaDB 、AMQ、JDBC等,详情可以访问官网。 ActiveMQ默认是使用KahaDB持久化消息。在/conf/activemq.xml如下配置: KahaDB是一个文件型数据库,是以日志形式保存到文件

    2024年02月11日
    浏览(36)
  • ThingsBoard使用持久化RPC案例场景

    昨天,有个兄弟找到我,他说他遇到问题了,场景如下:他有一个扫描枪A设备,A设备上报数据到ThingsBoard,然后需要将数据发送给B设备,其实这样想实现很简单的就是一个给B设备下发RPC即可,但是啊,这个兄弟说B设备可能会离线,如何保证B设备上线后照样能收到A设备的消

    2024年02月12日
    浏览(98)
  • Pinia使用方法及持久化存储

    Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。它跟 Vuex 有一定的相似度,但还是有很大的区别。 愿意看这篇博客的人,想必已经看过了官方文档,官方文档很详细,包含各种使用情景和理论,因此本文不说理论,只说具体的使用方法,想深入研究的建议去

    2024年02月08日
    浏览(52)
  • ruoyi-app(uniapp) 解决持久化登录:退出应用后再次打开保持已登录状态以及登录页显示tabBar的问题

    在使用ruoyi-app开发移动端调试的时候发现已登录用户退出应用后台后重新打开需要重新登录, 于是想做一个持久保存登录状态的功能。 首先ruoyi-app自带的登录存储token的流程完全没问题,但是在 pages.json文件中第一个页面却是登录页;uniapp官网写道在pages第一项为应用首页  

    2024年02月04日
    浏览(61)
  • Redis的简单使用 (实现Session持久化)

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 一、Redis数据类型的使用 1. 字符串(String) 2. 字典类型(哈希 Hashes) 3. 列表(Lists) 4. 集合(Sets) 5. 有序集合(Sorted sets) 二、SpringBoot连接Redis操

    2024年02月11日
    浏览(44)
  • SpringBoot日志持久化以及使用lombok输出日志

    上一篇文章介绍了日志级别和自定义输出日志 链接 https://blog.csdn.net/qq_45875349/article/details/132510387?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132510387%22%2C%22source%22%3A%22qq_45875349%22%7D 那么想要将控制台上的日志信息,保存在硬盘上,以便出问题之后追溯

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包