作者:焦作艾文斯 | 来源:互联网 | 2024-11-13 18:30
1、问题
想改变vuex中state中的数据有以下两种方法:
1:直接修改:this.$store.state.变量名 = 新值 ;
2:通过mutation修改state this.$store.commit(‘函数名’,payload)
两种方法都可以改变state的值,那为什么要使用mutatiion呢??直接修改不是更方便么??
2、解答
官网上说 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation
---- 官网vuex
第一种方法也可以触发视图更新,但是在严格模式下,使用该方法将报错
既然官网上说要使用mutation那就用推荐的方法呀,指不定哪天非严格模式下第一种方法也报错了,再改不就尴尬了?
3、感谢大佬的写法
最开始我为什么有直接修改state中变量,而不用官网推荐的mutation的想法呢??因为感觉麻烦…
使用mutation我最开始的写法是下面这样的,多一个state,下面加一个方法来改变这个state,麻烦~
import Vue from "vue";
import Vuex, { Store } from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {
orientation: 0,
mode: 1,
selectThemeId: null,
},
mutations: {
orientation: (state, payload) => { state.orientation = payload },
mode: (state, payload) => { state.mode = payload }.
selectThemeId: (state, payload) => { state.selectThemeId = payload }
},
getters: {},
actions: {},
modules: {}
});
附上大佬的写法:真香~
import Vue from "vue";
import Vuex, { Store } from "vuex";
Vue.use(Vuex);
const state = {
orientation: 0,
mode: 1,
selectThemeId: null,
}
export default new Vuex.Store({
state,
mutations: {
...Object.keys(state).reduce((obj: object, key: string) => {
return {
...obj,
[key]: (state: any, payload: any) => state[key] = payload,
}
}, {})
},
getters: {},
actions: {},
modules: {}
});
他这么写的思路我截图附在下面了~