uniapp中使用vuex实现缓存登录信息

1.在根目录下新建store目录,store中新建index.js,如图

 

 2.index.js代码如下

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
	state: {
		uerInfo: {},
		hasLogin: false,
		getMsg: {},
		adduser: {},
		addgroup: {},
		msgboxuser: '',
		msgboxgroup: '',
		userstate: '', ///用户状态
		chatTolist: {}, ///当前聊天对话的里面是聊天的对象和
		
	},
	mutations: {
		login(state, provider) {
			state.hasLogin = true
			state.uerInfo.uid = provider.u_id
			state.uerInfo.userName = provider.u_nick_name
			state.uerInfo.avatar = provider.u_avater
			uni.setStorage({
				key: 'uerInfo',
				data: provider
			})
		},
		logout(state) {
			state.hasLogin = false
			state.uerInfo = {}
			uni.removeStorage({
				key: 'uerInfo'
			});
		}

	},
	getters: {
		currentdilog: (state, getters) => {
			return state.chatTolist
		},
		hasLogin: (state, getters) => {
			return state.hasLogin
		},
		userinfo: (state, getters) => {
			return state.uerInfo
		},
		getUerid: (state, getters) => {
			return state.uerInfo.uid
		}
	},
})

export default store

2.配置app.vue

<script>
	import Vue from 'vue'
	import {
		mapMutations
	} from 'vuex';

	export default {
		onLaunch: function() {
			uni.getStorage({
				key: 'uerInfo',
				success: (res) => {
					Object.keys(res.data).length === 0 ? '' : this.login(res.data)
					// 如果还需要重新校验或是想要刷新token的有效时间 就再联网请求一次
					// uni.request({
					// 	url: `${this.$serverUrl}/auth.php`,
					// 	header: {
					// 		"Content-Type": "application/x-www-form-urlencoded",
					// 		"Token":res.data.token
					// 	},
					// 	data: {
					// 		"username":res.data.user_name
					// 	},
					// 	method: "POST",
					// 	success: (e) => {
					// 		if (e.statusCode === 200 && e.data.code === 0) {
					// 			this.login(e.data);
					// 		}
					// 	}
					// })
				}
			});
		},
		onLoad() {
			
		},
		methods: {
			...mapMutations(['login']),
		}
	}
</script>

<style lang="scss">

</style>

3.配置main.js

import Vue from 'vue'
import App from './App'

import store from './store'


Vue.prototype.$store = store

App.mpType = 'app'

const app = new Vue({
	store,
	...App
})
app.$mount()

4.页面中调用

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<!-- 判断是否登录 -->
			<text class="title" v-if="hasLogin">{{title}}</text>
		</view>

	</view>
</template>

<script>
	import {
		mapState,
		mapMutations
	} from 'vuex';
	export default {
		computed: mapState(['hasLogin', 'uerInfo']),
		data() {
			return {
				title: 'Hello',

			}
		},
		onLoad() {
			this.$api.api_getUpdateApp({
				user_id: 'sdfsdfsd',
				name: '测试'
			}).then(res => {
				/* 成功的回调 */
				this.logout(); /* 执行退出登录*/
				this.login(res.data)  /* 执行登录*/
				console.log(this.hasLogin)   /* 判断是否登录 并且可以直接在view中用*/
				console.log(uerInfo)  /* 里面存的是用户的基本信息(和/store/index.js 中的state对应的),也可以直接在view中用*/
				console.log(this.$store.state.uerInfo)  /* 和上边的结果是一样的*/
			}).catch(err => {
				/* 失败回调 */
			}).finish(e => {
				/* 成功或者失败都会执行 */
			})
		},
		methods: {
			...mapMutations(['logout', 'login']),
		}
	}
</script>

<style>
</style>

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
假设你要缓存的个人信息是用户的姓名和年龄,可以按照以下步骤来实现: 1. 安装vuex:在uniapp项目根目录下运行以下命令: ``` npm install vuex --save ``` 2. 创建vuex store:在`src`目录下创建一个名为`store`的目录,在该目录下创建一个`index.js`文件,文件内容如下: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { name: '', age: 0 }, mutations: { SET_NAME(state, name) { state.name = name }, SET_AGE(state, age) { state.age = age } }, actions: { setName({ commit }, name) { commit('SET_NAME', name) }, setAge({ commit }, age) { commit('SET_AGE', age) } } }) export default store ``` 在这个store,我们定义了两个状态`name`和`age`,并且定义了两个mutation用于修改这两个状态。 3. 在a页面使用vuex:在a页面的`<script>`标签,可以通过以下代码来读取和修改vuex store的状态: ```javascript import { mapState, mapMutations } from 'vuex' export default { computed: { ...mapState({ name: state => state.name, age: state => state.age }) }, methods: { ...mapMutations([ 'SET_NAME', 'SET_AGE' ]), updateInfo() { this.SET_NAME('Tom') this.SET_AGE(18) } } } ``` 在这个例子,我们使用了`mapState`函数来将vuex store的`name`和`age`状态映射到组件的计算属性。同时,我们还使用了`mapMutations`函数来将`SET_NAME`和`SET_AGE`两个mutation映射到组件的方法。在`updateInfo`方法,我们调用了两个mutation来修改vuex store的状态。 4. 在b页面使用vuex:在b页面的`<script>`标签,可以通过以下代码来读取vuex store的状态: ```javascript import { mapState } from 'vuex' export default { computed: { ...mapState({ name: state => state.name, age: state => state.age }) } } ``` 在这个例子,我们同样使用了`mapState`函数来将vuex store的`name`和`age`状态映射到组件的计算属性。此时,我们读取到的状态是最新的状态。 到此为止,我们已经完成了使用vuex缓存个人信息,并在a页面和b页面显示和修改的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉臣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值