此篇文章是介绍利用 vuex 储存用户登录时的相关信息的使用方法。

声明:前面部分是刚开始对vuex的接触,后面部分是学习后对vuex使用的部分优化,想直接用最新的,可以直接找到 20200819 部分。

效果图:

image.png

使用方法:

相关配置文件

image.png

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
Vue.use(Vuex)
export default new Vuex.Store({//模块引入modules:{user:user}
})

user.js


export const USER_SIGNIN = 'USER_SIGNIN' //登录成功
export const USER_SIGNOUT = 'USER_SIGNOUT' //退出登录
export const USER_INFO_COMMIT = 'USER_INFO_COMMIT' //配合sessionStorage解决vux刷新丢失问题
export default {// 存储状态(变量)state: {userInfo: {},//储存用户相关信息userLogin: false,//用户登录状态},// 对数据获取之前的再次编译,可以理解为state的计算属性 this.$store.getters.方法名。getters: {},// 修改状态,并且是同步的。在组件中使用$store.commit('',params)mutations: {//用户登陆方法[USER_SIGNIN](state, user) {//储存用户相关信息sessionStorage.setItem('userInfo', JSON.stringify(user))sessionStorage.setItem('userLogin', 'true')if (JSON.stringify(user)) {//解决用户信息未及时更新问题Object.assign(state.userInfo, sessionStorage.getItem('userInfo') ? JSON.parse(sessionStorage.getItem('userInfo')) : user)//更新用户登录状态state.userLogin = sessionStorage.getItem('userLogin') ? JSON.parse(sessionStorage.getItem('userLogin')) : false}},//用户退出登录方法[USER_SIGNOUT](state) {state.userLogin = false;state.userInfo = {};//清除sessionStorage内的所有记录sessionStorage.clear();},//解决浏览器刷新页面数据丢失问题(根据之前储存的sessionStorage相关信息来判断)[USER_INFO_COMMIT](state) {Object.assign(state.userInfo, sessionStorage.getItem('userInfo') ? JSON.parse(sessionStorage.getItem('userInfo')) : {})state.userLogin = sessionStorage.getItem('userLogin') ? JSON.parse(sessionStorage.getItem('userLogin')) : false;},},// 异步操作actions: {[USER_SIGNIN]({ commit }, user) {commit(USER_SIGNIN, user)},[USER_SIGNOUT]({ commit }) {commit(USER_SIGNOUT)},[USER_INFO_COMMIT]({ commit }) {commit(USER_INFO_COMMIT)}}
}

main.js

import store from './store/index' //引入/* eslint-disable no-new */
new Vue({el: '#app',store, //引入router,components: { App },template: '<App/>'
})

配置完成后,就可以直接在vue组件中使用

xxx.vue组件

<template><div style="margin:200px 0"><p>登录状态:{{userLogin}}</p><p>用户信息:{{userInfo}}</p><button @click="loginIn()">登录</button><button @click="loginOut()">退出</button></div>
</template><script>
export default {computed: {userLogin() {if (this.$store.state.user.userLogin) {return this.$store.state.user.userLogin;} else {this.$store.commit("USER_INFO_COMMIT");return this.$store.state.user.userLogin;}},userInfo() {if (this.$store.state.user.userLogin) {return this.$store.state.user.userInfo;} else {this.$store.commit("USER_INFO_COMMIT");return this.$store.state.user.userInfo;}}},data() {return {userMsg: {name: "小明",age: "18",sex: "男"}};},methods: {loginIn() {this.$store.commit("USER_SIGNIN", this.userMsg);},loginOut() {this.$store.commit("USER_SIGNOUT");}}
};
</script><style>
</style>

“约见”面试官系列之常见面试题第五篇说说vuex登录信息(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题第十七篇之实现深拷贝(建议收藏)

    建议最简单的第一种 1.通过 JSON 对象实现深拷贝 this.data = JSON.parse(JSON.stringify(this.vm.$store.state.security.menu ...

  2. “约见”面试官系列之常见面试题第十篇值meta标签(建议收藏)

    目录 什么是meta标签? meta的作用 meta的必需属性和可选属性 必需属性content 可选属性 常用meta标签大总结 charset 百度禁止转码 SEO 优化部分 viewport 各 ...

  3. “约见”面试官系列之常见面试题第六篇说说弹性布局(建议收藏)

    目录 一.基本概念 二.容器属性 2.1  flex-direction: 2.2   flex-wrap: 2.3  justify-content: 2.4  align-items: 2.5  ...

  4. “约见”面试官系列之常见面试题第二十篇之vuex得理解(建议收藏)

    一.概念 vuex是一个专为vue.js应用程序开发的状态管理模式(它采用集中式存贮管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化). 二.五大核心属性 核心属性为:sta ...

  5. “约见”面试官系列之常见面试题第二十七篇之vue-router的重要属性

    export default new Router({mode: 'history', //路由模式,取值为history与hashbase: '/', //打包路径,默认为/,可以修改routes: ...

  6. “约见”面试官系列之常见面试题第二十三篇之get和post区别(建议收藏)

    POST和GET是HTTP协议中最常用的两种传参方式,这里小小总结一下两者的区别,欢迎补充~! 请求方式 GET POST 参数位置 url的query中 一般在content中,query也可 参数 ...

  7. “约见”面试官系列之常见面试题第二十一篇之函数防抖和节流(建议收藏)

    目录 前言 概念 函数防抖(debounce) 函数节流(throttle) 常见应用场景 函数防抖的应用场景 函数节流的应用场景 实现原理 函数防抖(debounce) 函数节流(throttle) ...

  8. “约见”面试官系列之常见面试题第十三篇之css动画效果(建议收藏)

    目录 CSS动画简介 第一部分:CSS Transition 1.1 基本用法 1.2 transition-delay 1.3 transition-timing-function 1.4 tran ...

  9. “约见”面试官系列之常见面试题第十一篇之canvas(建议收藏)

    目录 前言 介绍 小试牛刀 应用案例 动画 API介绍 Demo 游戏 三要素 Demo 截图 API介绍 canvas.style.width 和 canvas.width 的区别 Demo 合成图 ...

最新文章

  1. 用css网站布局之十步实录~
  2. hdu2371 矩阵乘法(求序列位置改变m次后的序列)
  3. FPGA与MCU,DSP(如C6000,C5000等)等设计思想的异同
  4. ​rsync生产排错FAQ整理16
  5. 时间转年月日_编程中常见的时间格式
  6. 如何有效地遍历Java Map中的每个条目?
  7. CSDN技术分享——程序员如何快速上手区块链底层技术?
  8. python词云可视化视频_Python数据分析-可视化-wordcloud词云
  9. MSP432P401R学习:CCS入门实验练习,使用CCS新建、导入、编译、下载工程
  10. 计算机专业考注册测绘师经验,注册测绘师考试攻略
  11. 10000个虎年限定版红包封面!给!
  12. 几种ESB(企业服务总线)介绍
  13. 《视觉SLAM 十四讲》第五讲 实践:拼接点云-编译遇到的terminate called after throwing an instance of 'pcl::IOException问题及解决方法
  14. 8个酷炫的GitHub技巧
  15. xp系统网上邻居看不到局域网电脑_Win7系统网上邻居看不到局域网中其他电脑怎么办...
  16. esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
  17. 利用MQTT协议与阿里云数据交互的python程序
  18. 微信公众号-消息推送
  19. 这十一条程序员必备软技能,你一定要知道
  20. 国际化开发技术FAQ

热门文章

  1. 设定Word段落的背景色
  2. 唯一约束(UNIQUE_KEY)
  3. 年底了,总结一下大型网站的入侵经验[t00ls转载]
  4. PHP 一个比较完善的文件上传(转).
  5. 新手入门:AIX操作系统安装图解
  6. 结构体+sort方法
  7. django 创建mysql失败_创建表时出现Django MySQL错误
  8. html怎么让五张照片并排显示,最考验右脑5张照片,30s内能发现问题都是牛人,PS做不出来...
  9. HTML5 requestAnimationFrame( ) 动画API
  10. Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析