基本用途:
基本用法:
/store/store.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import Vue from 'vue'; import Vuex from 'vuex';
Vue.use(Vuex);
export const store = new Vuex.Store({ state: { sideBarOpened: false }, getters: { changeState: state => { } }, mutations: { }, actions: { increment ({ commit }, payload) { commit('突变方法名') }, asyncIncrement({commit}) => { setTimeout(() => { commit('increment') }, 1000) } }, modules: { } });
|
main.js
1 2 3 4 5 6 7 8
| import { store } from './store/store' * * new Vue({ el: '#app', store, ... })
|
访问vuex中的数据和方法
1 2
| this.$store.state.数据名 this.$store.getters.方法名
|
受影响组件局部定义计算属性响应变化数据
1 2 3 4 5
| computed: { open () { return this.$store.state.sideBarOpened } }
|
将 store 中的 getters/mutations 映射到局部(计算属性/方法)使用mapGetters/mapMutations辅助函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import { mapGetters } from 'vuex'
computed: { ...mapGetters([ 'doneTodosCount', doneCount: 'doneTodosCount' ]) }
|
注意事项:
mutation 必须是同步函数 — devtool要保存快照,方便追踪状态变化
使用 v-model 绑定 vuex 计算属性的时候要设置get 和 set 才能双向绑定
1 2 3 4 5 6 7 8 9 10
| computed: { value: { get () { return this.$store.getters.value; }, set (event) { this.$store.dispatch('updateValue', event.target.value); } } }
|