一、原理图及作用
功能介绍:
简单说就是Vue
项目中,各个组件间通信的一种框架
相较于之前的全局事件总线
,该框架更实用!
提高了代码的复用率,把核心业务代码,集中到store
中,这样,一处实现,处处调用。
原理:
VC 调用 actions
actions调用mutations
mutations调用state
VC读取state
完美闭环!
二、核心代码
vue_test/src/store/index.js
//该文件用于创建vuex中最为核心的store//引入Vue
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'Vue.use(Vuex);//准备actions 用于响应组件中的动作
const actions = {jia(context, value) {console.log('actions中的jia被调用了')context.commit('JIA', value)},jian(context, value) {console.log('actions中的jian被调用了')context.commit('JIAN', value)},jiaOdd(context,value){console.log('actions中的jiaOdd被调用了')if(context.state.sum % 2){context.commit('JIA',value)}},jiaWait(context,value){console.log('actions中的jiaWait被调用了')setTimeout(()=>{context.commit('JIA',value)},500)}
};
//准备mutations 用于操作数据state
const mutations = {JIA(state,value){console.log('mutations中的JIA被调用了')state.sum += value},JIAN(state,value){console.log('mutations中的JIAN被调用了')state.sum -= value}
};
//准备state 用于存储数据
const state = {sum: 0 //当前的和
};//创建并暴露store
export default new Vuex.Store({actions,mutations,state
});
main.js
这样配置后,在所有的VC
中就可以使用这个store
了。
import store from './store/index'//创建vm,整个项目就这1个vm,其他的都是vc组件
new Vue({el:"#app",render: h => h(App),store,beforeCreate() {Vue.prototype.$bus = this; //安装全局总线}
});
三、使用案例
1、读取store
中的变量值
{{$store.state.sum}}
2、VC
中修改store
中的变量值
方式1:
this.$store.dispatch('jia',this.n)
方式2:
this.$store.commit('JIA',this.n)
四、详细说明
1、类比Java
的mvc
我们可以看到,store
中,主要有三个对象
actions 类似于Java的controller接口,业务逻辑
mutations 类似于Java的service层,修改数据
state 类似于Java的dao层,存储数据
2、store
中各对象详解
actions
对象中的函数参数:
context
:
有这个context
,那么,actions
中的函数,就可以调用actions
中其它的函数
不一定,actions
就要进入mutations
步骤。
value
:
就是调用时传入的具体值。
3、mutations
对象中的函数参数:
state
:就是store
中的state
。
value
:调用时传入的具体参数值。