Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
Vuex分为三部分:
我这里使用的vuecli脚手架创建时加入vuex,可以直接在store目录index.js里直接添加代码。
这里我以登录为例,页面获取用户个人信息为例子:
getter代码块
const getters = {
//例子
phone: state => state.user.phone,
}
export default getters
store中index代码块
import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'//对左侧登录导航栏进行获取
import settings from './modules/settings'//角色权限设置
import user from './modules/user'//用户获取
import getters from './getters'//设置geter
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
app,
settings,
user
},
getters
})
export default store
modules模块store管理用户信息实例
import { 接口 } from '位置'//接口获取用户信息
//储存变量
const state = {
name: '',
avatar: '',
isLogin: '',
email: '',
phone: '',
userId: '',
token: ''//接口获取token
},
//同步操作
const mutations = {
SET_TOKEN: (state, token) => {
state.token = token
},
}
//异步操作
const actions = {
//实例点击登录
// user login
login({ commit }, userInfo) {
const { username, password } = userInfo
return new Promise((resolve, reject) => {
login({ loginName: username.trim(), password: password }).then(res => {
setLoginState('1')
commit('SET_NAME', res.data.userName)
window.localStorage.setItem('token', res.data.token)
resolve()
}).catch(error => {
reject(error)
})
})
},
// user logout
logout({ commit, state }) {
return new Promise((resolve, reject) => {
logout().then(() => {
setLoginState('')
window.localStorage.setItem('token', '')
// resetToken()
resolve()
}).catch(error => {
reject(error)
})
})
},
}
export default {
namespaced: true,
state,
mutations,
actions
}
组件内使用
//getters调取方法
this.store.$state.user.phone
//action调取方法重新登录
async logout() {
await this.$store.dispatch('user/logout')
this.$router.push('/login')
},
vue3.0里使用,vue3.0这里需要导入createStore进行vuex的操作,同上
import { createStore } from 'vuex'
//创建、获取、移除、清除
export default createStore({
state: {},
getter: {},
mutations: {},
actions: {},
modules:{}
})