Vuex computed 属性无法绑定 Vuex 状态?解决办法在这里!
2024-03-28 10:15:22
Vuex 中的 computed 属性:绑定限制和解决方案
问题:无法将 computed 属性绑定到 Vuex 状态
Vuex 中的 computed 属性是只读的,这意味着无法直接将它们绑定到 Vuex 状态中的数据。这可能令人沮丧,尤其是当你想在你的 Vue 组件中显示和编辑全局数据时。
解决方案:使用 mutation
为了将数据存储在 Vuex 状态中并使其可编辑,可以使用 mutation。mutation 是用来修改 Vuex 状态的函数。以下是如何使用 mutation 将值绑定到 computed 属性:
修改 computed 属性
修改你的 computed 块,如下所示:
computed: {
name: {
get() {
return this.$store.state.name;
},
set(newName) {
this.$store.commit('updateName', newName);
}
}
}
添加 mutation 到 store
添加一个 mutation 到你的 store,如下所示:
mutations: {
updateName(state, newName) {
state.name = newName;
}
}
在组件中使用 mutation
在你的 Vue 组件中,你可以使用 name
computed 属性来获取和更新状态:
nextStep() {
var self = this;
this.$validator.validateAll().then((result) => {
if (result) {
self.name = self.$el.querySelector('input[name="name"]').value;
this.$store.dispatch('addContactInfoForOrder', self);
this.$store.dispatch('goToNextStep');
return;
}
});
}
现在,当你在你的表单中输入一个新的名称时,它将被存储在 Vuex 状态中,并且 name
computed 属性将更新,反映出该更改。
结论
虽然 Vuex 中的 computed 属性是只读的,但可以使用 mutation 来允许你将它们绑定到 Vuex 状态。通过遵循本教程中的步骤,你可以轻松地在你的 Vue 组件中显示和编辑全局数据。
常见问题解答
- 为什么我无法直接将 computed 属性绑定到 Vuex 状态?
computed 属性是只读的,因为它们是为了提供可缓存的派生数据,如果它们可以修改,就会破坏缓存。
- 我可以使用其他方法将值绑定到 Vuex 状态吗?
是的,除了 mutation 之外,你还可以使用 actions 或 Vuex 绑定的 map 方法来修改 Vuex 状态。
- 什么时候应该使用 mutation?
mutation 应该用于直接修改 Vuex 状态,而 actions 应该用于执行异步操作或调用其他 mutations。
- 我需要对我的 Vue 组件进行任何其他更改吗?
否,只要你正确地更新了你的 computed 属性和 mutation,你的 Vue 组件将自动更新,反映 Vuex 状态中的更改。
- 我可以了解更多关于 Vuex 和它的特性吗?
是的,你可以在 Vuex 文档中找到更多信息:https://vuex.vuejs.org/