文章目录
- 1,入门案例
- 辅助函数
- 2,mutations传参
- 辅助函数
- 3,actions
- 辅助函数
- 4,getters
- 辅助函数
- 5,模块拆分
- 6,访问子模块的state
- 辅助函数
- 7,访问子模块的getters
- 辅助函数
- 8,访问子模块的mutations
- 辅助函数
- 9,访问子模块的actions
- 辅助函数
1,入门案例
安装库。
npm install vuex@3
新建store.js。
import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++}}
})export default store
main.js。
new Vue({render: h => h(App),store
}).$mount('#app')
最后,计数器案例。
<template><h1 @click="add">{{ $store.state.count }}</h1>
</template><script>
export default {name: 'App',methods: {add() {this.$store.commit('increment')}}
}
</script>
效果:
辅助函数
可以将数据自动变成计算属性。
<template><h1 @click="add">{{ count }}</h1>
</template><script>
import { mapState } from "vuex";
export default {name: 'App',methods: {add() {this.$store.commit('increment')}},computed: {...mapState(['count'])}
}
</script>
2,mutations传参
跟着后面写就行,只能传一个参数。
const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}}
})this.$store.commit('increment', 5)
辅助函数
可以将mutations自动变成方法。
<template><h1 @click="increment(5)">{{ count }}</h1>
</template><script>
import { mapState, mapMutations } from "vuex";
export default {name: 'App',methods: {...mapMutations(['increment'])},computed: {...mapState(['count'])}
}
</script>
3,actions
异步操作数据。
const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}}
})this.$store.dispatch('incrementAction', 5)
辅助函数
可以将actions自动变成方法。
<template><h1 @click="incrementAction(5)">{{ count }}</h1>
</template><script>
import { mapState, mapMutations, mapActions } from "vuex";
export default {name: 'App',methods: {...mapActions(['incrementAction']),...mapMutations(['increment'])},computed: {...mapState(['count'])}
}
</script>
4,getters
派生状态,类似于计算属性。
const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
})$store.getters.count1
辅助函数
可以将getters自动变成计算属性。
<template><h1 @click="incrementAction(5)">{{ count1 }}</h1>
</template><script>
import { mapState, mapMutations, mapActions, mapGetters } from "vuex";
export default {name: 'App',methods: {...mapActions(['incrementAction']),...mapMutations(['increment'])},computed: {...mapState(['count']),...mapGetters(['count1'])}
}
</script>
5,模块拆分
新建a.js。
新增了一个配置项namespaced。
export default {namespaced: true,state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
}
b.js。
export default {namespaced: true,state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
}
改写store.js。
const store = new Vuex.Store({modules: {a, b}
})
6,访问子模块的state
$store.state.a.count
$store.state.b.count
辅助函数
<template><div><h1>{{ count }}</h1></div>
</template><script>
import { mapState } from "vuex";
export default {computed: {...mapState('a', ['count'])}
}
</script>
7,访问子模块的getters
$store.getters['a/count1']
$store.getters['b/count1']
辅助函数
用法与前面一致。
8,访问子模块的mutations
this.$store.commit('a/increment', 1)
辅助函数
用法与前面一致。
9,访问子模块的actions
this.$store.dispatch('a/incrementAction', 1)
辅助函数
用法与前面一致。