Vuex是什么
- 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件(Vue.use(vuex)),对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信.
- Github地址: vuex官方地址
什么时候使用Vuex
- 多个组件依赖于同一状态
- 来自不同组件的行为需要变更同一状态
vuex4版本只支持vue3.0,所以在vue2.0中使用, 需要npm i vuex@3 指定版本
搭建vuex环境
- 创建文件:
src/store/index.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const actions = {};
const mutations = {};
const state = {};
export default new Vuex.Store({
actions: actions,
mutations: mutations,
state,
});
- 在main.js中创建vm时传入store配置项
.........
import store from './store'
.........
/创建vm
new Vue({
el:'#app',
render:h => h(app),
store
)}
基本使用:
- 初始化数据,配置actions,配置mutations,操作文件store.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const actions = {
jia(context, value) {
context.commit("JIA", value);
},
};
const mutations = {
JIA(state, value) {
state.sum += value;
},
};
const state = {
sum: 0,
};
export default new Vuex.Store({
actions: actions,
mutations: mutations,
state,
});
- 组件中读取vuex中的sum数据:
$store.state.sum (模板中写不用加this,js脚本中写需要this.$store.state.sum) - 组件中修改vuex中的数据:
$store.dispatch('actions中的方法名',数据) 或$store.commit('mutations中的方法名',数据) - 若没有网络请求或者其他业务逻辑,组件也可以越过actions,即不写dispatch,直接使用commit
getters的使用:
- 概念:当state中的数据需要经过加工后再使用时,可以使用getters加工.
- 在store.js中追加getters配置
........
const getters = {
bigSum(state) {
return state.sum * 10;
},
};
export default new Vuex.Store({
.......
getters,
});
........
- 在组件中读取数据方法:
$store.getters.bigSum
快速生成读取方法和使用方法
利用vuex自带的{mapState,mapGetters,mapMutations,mapActions}来方便快捷的生成代码. 首先在需要的组件文件中引入
import {mapState, mapGetters, mapMutations, mapActions} from 'vuex'
computed: {
...mapState({sum: 'sum', school: 'school'}),
...mapGetters(['bigSum']),
},
methods: {
...mapActions({increment: 'jia'}),
...mapMutations({decrement: 'JIAN'}),
}
mapActions与mapMutations必须在使用时传递值例如:
<button @click = “increment(n)” > + </button>
|