Vue项目中有一些交互和数据通信比较复杂的地方,需要用到一个全局状态管理,那么他就可以使用Vuex;(Vuex官方文档链接 )首先我们来看下Vuex的基本使用方法如下:
Vuex,在Vue项目中安装Vuex的依赖包;# npm
npm install vuex@next --save
# yarn
yarn add vuex@next --save
src文件内新建一个store的文件夹用于存放状态管理的数据,新建一个index.js的文件作为输出,建一个modules的文件夹将状态管理做模块化拆分;# 文件目录
src/
| - store/
| |- modules/
| | |- login.js
| | |- user.js
| |- index.js
Vuex中状态管理模块执行过程描述大致如下:// index.js
import Vue from 'vue';
import Vuex from 'vuex';
import user from './modules/user';
import loginfrom './modules/login';
Vue.use(Vuex);
const store = new Vuex.Store({
namespaced: true,
state: {
test: 'Hello'
},
// 管理模块
modules: {
user,
login,
},
});
export default store;
// user.js
// 声明初始值状态值
const state = {
isLogin: false, // 用户是否登录
};
// 获取状态值
const getters = {
getIsLogin(state) {
return state.isLogin;
},
};
// 设置状态值
const mutations = {
IS_LOGIN(state, data) {
state.isLogin= data;
},
};
// 同步修改状态值
const actions = {
setIsLogin({ commit }, data) {
commit('IS_LOGIN', data);
},
};
export default {
state,
getters,
mutations,
actions,
};
Vuex并且设置它的值:// login.vue
import { mapGetters, mapActions } from 'vuex';
computed: {
...mapGetters(['isLogin']), // 获取Vuex的值
},
mounted() {
if (this.isLogin) {
// 登陆后操作 todo....
}
},
methods: {
...mapActions(['setIsLogin']),
login() {
// 登录成功
const loginStatus = true;
// ...
if (loginStatus) this.setIsLogin(true); // 设置Vuex的值
}
}
最后一点,也比较重要,Vuex在刷新的时候存在状态丢失的情况,这个需要做Vuex持久化处理,这个持久化处理一般就是把数据存储在LocalStorage中;如果项目是使用服务端渲染则不能做持久化,在服务端不能访问LocalStorage对象,这里面有一些细节大家可以多多琢磨。