对 Vuex 模块感到困惑
Confused about Vuex modules
我会尽量把它布置得干净利落:
我有一个正在渲染的 Vue 组件,名为 World.vue:
<template>
<v-container>
This is the whole world
<v-btn @click="test()" />
</v-container>
</template>
<script>
import { mapState, mapActions } from 'vuex';
export default {
computed: {
...mapState('drawers', ['isEquipmentOpen']),
},
methods: {
...mapActions('drawers', ['test']),
},
};
</script>
我在 Vuex 商店中有一个名为 drawers (drawers.js) 的模块:
export default {
namespaced: true,
state: {
isEquipmentOpen: false,
},
actions: {
test(state) {
console.log(state.isEquipmentOpen);
state.isEquipmentOpen = !state.isEquipmentOpen;
},
},
};
我不明白的是为什么调用 test() 时,它无法访问 isEquipmentOpen(记录值 undefined
)。如何操作 isEquipmentOpen?
您不能改变操作的状态值。
- 您需要创建一个突变 属性,在其中创建一个 setter 方法
并调用它以更改值。
- 将 { commit } 参数传递给操作中的方法 属性。
您不需要在操作方法中传递状态参数。
确保 commit() 中的字符串值与 setter 名称相同。
export default {
namespaced: true,
state: {
isEquipmentOpen: false,
},
actions: {
test({ commit }) {
console.log(state.isEquipmentOpen);
commit("setIsEquipmentOpen");
},
mutations: {
setIsEquipmentOpen: state => state.isEquipmentOpen != state.isEquipmentOpen
},
};
希望你明白答案!
我会尽量把它布置得干净利落:
我有一个正在渲染的 Vue 组件,名为 World.vue:
<template>
<v-container>
This is the whole world
<v-btn @click="test()" />
</v-container>
</template>
<script>
import { mapState, mapActions } from 'vuex';
export default {
computed: {
...mapState('drawers', ['isEquipmentOpen']),
},
methods: {
...mapActions('drawers', ['test']),
},
};
</script>
我在 Vuex 商店中有一个名为 drawers (drawers.js) 的模块:
export default {
namespaced: true,
state: {
isEquipmentOpen: false,
},
actions: {
test(state) {
console.log(state.isEquipmentOpen);
state.isEquipmentOpen = !state.isEquipmentOpen;
},
},
};
我不明白的是为什么调用 test() 时,它无法访问 isEquipmentOpen(记录值 undefined
)。如何操作 isEquipmentOpen?
您不能改变操作的状态值。
- 您需要创建一个突变 属性,在其中创建一个 setter 方法 并调用它以更改值。
- 将 { commit } 参数传递给操作中的方法 属性。
您不需要在操作方法中传递状态参数。 确保 commit() 中的字符串值与 setter 名称相同。
export default {
namespaced: true,
state: {
isEquipmentOpen: false,
},
actions: {
test({ commit }) {
console.log(state.isEquipmentOpen);
commit("setIsEquipmentOpen");
},
mutations: {
setIsEquipmentOpen: state => state.isEquipmentOpen != state.isEquipmentOpen
},
};
希望你明白答案!