Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
在 Vuex 中,getter 类似于 Vue 组件中的计算属性,它们用于从 store 中派生出一些状态。每个模块可以有自己的 getter。
在 Vue 组件中,你可以通过 this.$store.getters
访问到全局的 getter,如果需要访问模块内的 getter,则需要加上模块的命名空间:
// 假设有一个名为 'myModule' 的模块,其中有一个 getter 名为 'myGetter'
computed: {
...mapGetters({
myGetter: 'myModule/myGetter'
})
}
或者直接通过 this.$store.getters['myModule/myGetter']
访问。
在模块内部,你可以直接通过 getters
属性访问本模块的 getter:
const myModule = {
getters: {
myGetter(state) {
// ...
}
},
someMethod() {
const value = this.getters.myGetter;
}
};
突变是唯一可以修改 Vuex 状态的地方,它们类似于事件,每个突变都有一个字符串的事件类型(type)和一个回调函数(handler)。
在 Vue 组件中,你可以通过 this.$store.commit
方法触发突变:
methods: {
increment() {
this.$store.commit('myModule/increment');
}
}
虽然通常不推荐在模块内部直接触发自身的突变,但如果你需要这样做,可以通过 commit
方法:
const myModule = {
mutations: {
increment(state) {
// ...
}
},
someMethod() {
this.commit('increment');
}
};
Vuex 的 getter 和突变在管理应用状态时非常有用。例如,当你需要在多个组件之间共享状态,或者需要在状态变化时执行一些逻辑时,Vuex 就可以派上用场。
this.$store
。this
可能不会指向 Vue 实例。this
。const myModule = {
methods: {
someMethod: () => {
// 使用箭头函数,这样 `this` 就会正确指向 Vue 实例
this.$store.commit('increment');
}
}
};
或者:
const myModule = {
methods: {
someMethod() {
// 在调用之前绑定 `this`
const vm = this;
vm.$store.commit('increment');
}
}
};
更多关于 Vuex 的信息,可以参考官方文档:https://vuex.vuejs.org/。
云+社区沙龙online [国产数据库]
腾讯云数智驱动中小企业转型升级系列活动
云+社区沙龙online [腾讯云中间件]
腾讯云数据湖专题直播
云+社区技术沙龙[第4期]
北极星训练营
小程序·云开发官方直播课(数据库方向)
长安链开源社区“核心开发者说”系列活动
领取专属 10元无门槛券
手把手带您无忧上云