vuex-counter计数器
安装:npm install vuex --save

1,创建 store 对象--提供一个初始 state对象和一些 mutation
store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
//指定初始化数据
const state = {
count: 0
}
//mutations:对象,包含了n个直接更新状态的方法
const mutations = {
ADD(state){
state.count++;
},
CUT(state){
state.count--;
}
}
//actions:对象,包含了n个间接更新状态的方法
const actions = {
add({commit}) {
commit('ADD') //提交一个mutation请求
},
cut({commit}) {
commit('CUT')
},
addIfOdd({commit,state}) {
if (state.count % 2 != 0) {
commit('ADD')
}
},
addAsynce({commit},state) {
setTimeout(()=>{
commit('ADD')
},1000)
}
}
//getters:对象,包含多个getter计算属性
const getters = {
evenOrOdd(state){ //当读取属性值时自动调用并返回属性值
return state.count%2==0?'偶数':'奇数'
}
}
export default new Vuex.Store({
state,
mutations,
actions,
getters
})
① state
提供一个初始 state对象
② mutations
每个mutation 都有一个字符串的 事件类型 和一个回调函数,这个回调函数就是我们实际进行状态更改的地方,并且它会接收一个 state 作为第一个参数。
当触发一个类型为 ADD 的 mutation 时(相应的 type 调用 store.comiit 方法),调用 ADD mutataion 的回调函数
③ actions
actions: {
increment (context) {
context.commit('increment')
}
}
action 函数接收一个与 store 实例具有相同方法和属性的 context 对象,因此可以调用 context.commit 提交一个 mutation。
实践中,经常用到 ES2015 的参数解构来简化代码(特别是需要多次调用 commit 的时候)
actions: {
increment ({ commit }) {
commit('increment')
}
}
④ getters
vuex 允许在 store 中定义 'getter',可以认为是 store 的计算属性,就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
getter 接收 state 作为第一个参数。
2,在 Counter 组件中通过 store 对象读取数据
首先在入口文件 main.js 中注册 vuex 的 store



直接通过 state 和 getters 读取数据

通过 store.dispacth 方法 分发 action

完成 counter 计数器,在vuex 中可以监视 state 变更情况

辅助函数 maState ,mapGetters,mapActions

mapSate 辅助函数:mapState 函数返回的是一个对象,要将它与局部计算属性混合使用,可以使用对象展开运算符,要求映射的计算属性的名称与 state 的子节点名称相同,将 state 混入 computed 对象中
mapGetters 辅助函数:将 store 中的 getter 映射到局部计算属性,使用对象展开运算符将 getter 混入 computed 对象中
mapActions:将组件的 methods 映射为 store.dispatch 调用

浙公网安备 33010602011771号