vue中vuex的五个属性和基本用法,另加js-cookie的使用

VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。

Vuex有五个核心概念:

state, getters, mutations, actions, modules。

1. state:

vuex的基本数据,用来存储变量

2. geeter:

从基本数据(state)派生的数据,相当于state的计算属性

3. mutation:

提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。

回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。

commit:同步操作,写法:this.$store.commit('mutations方法名',值)

如:this.$store.commit('SET_PASSWORD',data.Password)

4. action:

和mutation的功能大致相同,不同之处在于 ==》1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。

dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)

如:this.$store.dispatch('login',res.data)

5. modules:

模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

Vuex的用法:

文件夹步骤及引入与挂载

在vue项目的src文件下创建store文件夹(如果已经安装好了vuex的话),然后在store文件夹中创建index.js和getters.js文件与Modules文件夹

在项目的main.js中引入 和挂载

import store from './store'

let vue = new Vue({

router,

store,

render: (h) => h(App),

}).$mount("#app");

store文件下的index.js

//store文件下的index.js
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import bankCard from './Modules/bankCard'
import user from './Modules/user'Vue.use(Vuex)export default new Vuex.Store({getters,modules: {bankCard,user}
})

store文件下的getters.js

//store文件下的getters.js
const getters = {bankCards: state => state.bankCard.bankCards,selectBankCards: state => state.bankCard.selectBankCards,token: state => state.user.token
}
export default getters

在modules文件夹下创建一个user.js文件,user.js内容:


import { setToken, removeToken } from '@/utils/auth'
import { getLogin } from '@/api/login'const user = {state: {name: '',roles: [],permissions: [],token: undefined,// Password:'',},mutations: {/*commit:同步操作,写法:this.$store.commit('mutations方法名',值)如:this.$store.commit('SET_PASSWORD',data.Password)*/SET_TOKEN: (state, token) => {state.token = token},SET_ROLES: (state, roles) => {state.roles = roles},SET_PERMISSIONS: (state, permissions) => {state.permissions = permissions},// SET_PASSWORD:(state,Password)=>{//   state.Password=Password// }},actions: {/*dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)如:this.$store.dispatch('login',res.data)*/// 登录Login({ commit }, userInfo) {return new Promise((resolve) => {const { email, password } = userInfogetLogin({ email, password }).then(res => {const analysis = JSON.parse(atob(res.data.split('.')[1]))setToken('token', res.data)setToken('userId', analysis.userId)setToken('email', email)setToken('password', password)commit('SET_TOKEN', res.data)setToken('Admin-Token', res.data)  resolve()})})},// 获取用户信息GetInfo({ commit }) {return new Promise((resolve) => {commit('SET_PERMISSIONS', [1])commit('SET_ROLES', ['ROLE_DEFAULT'])resolve()// getInfo({token: sessionStorage.getItem('JWT')})//  .then(result => {//   const res = result.data;//   const userName = res.userName;//   if (res.permissionCodeList //      && res.permissionCodeList.length > 0) //   { // 验证返回的roles是否是一个非空数组//     commit("SET_PERMISSIONS", res.permissionCodeList);//   } else {//     commit("SET_ROLES", ["ROLE_DEFAULT"]);//   }//   commit("SET_NAME", userName);//   resolve(res);// }).catch(error => {//   reject(error);// });})},// 退出系统// LogOut({ commit, state }) {//   return new Promise((resolve, reject) => {// logout(state.token).then(() => {//   commit('SET_TOKEN', '')//   commit('SET_ROLES', [])//   commit('SET_PERMISSIONS', [])//   removeToken()//   resolve()// }).catch(error => {//   reject(error)// })// })// },// 前端 登出FedLogOut({ commit }) {return new Promise(resolve => {commit('SET_TOKEN', '')removeToken('Admin-Token')removeToken('token')removeToken('password')removeToken('email')removeToken('userId')resolve()})}}
}export default user

另:安装js-cookie :

1、方式一:在你的工程项目中使用npm进行安装

 npm install js-cookie --save

2、方式二:直接使用cdn资源

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js">
</script>

3、方式三:本地下载js-cookie的文件,然后进行项目script标签引入:

<script src="/path/to/js.cookie.js"></script>

src 文件夹下utils文件夹下auth.js内容:

//直接抛出,使用的时候直接引入 
//如:import { setToken, removeToken } from '@/utils/auth'
import Cookies from 'js-cookie'// 60秒 * 60分钟 * 24小时
function expires(seconds = 60 * 60 * 24) {return new Date(new Date() * 1 + seconds * 1000)
}export function getToken(TokenKey) {return Cookies.get(TokenKey)
}export function setToken(TokenKey, token, seconds) {return Cookies.set(TokenKey, token, { expires: expires(seconds) })
}export function removeToken(TokenKey) {return Cookies.remove(TokenKey)
}

使用

//点击登录
getLogin(){this.$store.dispatch('Login', {email: this.data.Email, password: this.data.Password }).then(() => {this.$router.push({ path: this.redirect || '/Home' }).catch(() => {})})},
//点击退出           
logOut(){this.$store.dispatch('FedLogOut')this.$router.push({path:"/"})},

使用下面这两种方法存储数据:

commit:同步操作,写法:this.$store.commit('mutations方法名',值)

如:this.$store.commit('SET_PASSWORD',data.Password)

dispatch:异步操作,写法:this.$store.dispatch('actions方法名',值)

如:this.$store.dispatch('login',res.data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Pytest集成Allure生成漂亮的图形测试报告

目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客&#xff0c;但是其实Allure首先是一个可以独立运行的测试报告生成框架&#xff…

uniapp两个单页面之间进行传参

1.单页面传参&#xff1a;A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

elementui实现当前页全选+所有全选+翻页保持选中状

原文来自&#xff1a;https://blog.csdn.net/sumimg/article/details/121693305?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121693305-blog-127570059.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm…

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息&#xff0c;并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时&#xff0c;思考了一下它的较浅层的原理&#xff0c;恩&#xff0c;这个阶段都 是一些初高的数学计算&#xff0c;从新看这里的时候顺便捡了捡初高中的数学&#xff0c;比如三角函数之类…

Nodejs安装及环境变量配置(修改全局安装依赖工具包和缓存文件夹及npm镜像源)

本机环境&#xff1a;win11家庭中文版 一、官网下载 二、安装 三、查看nodejs及npm版本号 1、查看node版本号 node -v 2、查看NPM版本号&#xff08;安装nodejs时已自动安装npm&#xff09; npm -v 四、配置npm全局下载工具包和缓存目录 1、查看安装目录 在本目录下创建no…

揭秘压力测试:从报告中看软件的极限

压力测试简介 压力测试&#xff0c;对于软件开发和测试领域的人来说&#xff0c;绝不是一个陌生的词汇。但是对于许多人来说&#xff0c;它的真正含义、目的和重要性可能仍然是一个迷。那么&#xff0c;什么是压力测试&#xff0c;为什么它如此关键&#xff1f; 压力测试是一…

kubeadml 安装 k8s

目录 一&#xff1a;kubeadml 安装 k8s 1、网络环境 2、 环境准备 3、 所有节点安装docker 4、所有节点安装kubeadm&#xff0c;kubelet和kubectl ​5、部署K8S集群 6、测试 二&#xff1a; 部署 Dashboard 一&#xff1a;kubeadml 安装 k8s 1、网络环境 master&am…

实现UDP可靠性传输

文章目录 1、TCP协议介绍1.1、ARQ协议1.2、停等式1.3、回退n帧1.4、选择性重传 1、TCP协议介绍 TCP协议是基于IP协议&#xff0c;面向连接&#xff0c;可靠基于字节流的传输层协议 1、基于IP协议&#xff1a;TCP协议是基于IP协议之上传输的&#xff0c;TCP协议报文中的源端口IP…

opencv基础46-图像金字塔02-拉普拉斯金字塔

前面我们介绍了高斯金字塔&#xff0c;高斯金字塔是通过对一幅图像一系列的向下采样所产生的。有时&#xff0c;我们希望通过对金字塔中的小图像进行向上采样以获取完整的大尺寸高分辨率图像&#xff0c;这时就需要用到拉普拉斯金字塔 前面我们已经介绍过&#xff0c;一幅图像在…

策略模式(C++)

定义 定义一系列算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可互相替换((变化)。该模式使得算法可独立手使用它的客户程序稳定)而变化(扩展&#xff0c;子类化)。 ——《设计模式》GoF 使用场景 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多…

这个免费抢火车票软件还有几个人不知道的?

hi&#xff0c;大家好我是技术苟&#xff0c;每天晚上22点准时上线为你带来实用黑科技&#xff01;由于公众号改版&#xff0c;现在的公众号消息已经不再按照时间顺序排送了。因此小伙伴们就很容易错过精彩内容。喜欢黑科技的小伙伴&#xff0c;可以将黑科技百科公众号设为标星…