您将计算道具与方法混淆了。如果你想要一个像上面这样设置你的 vue 实例的数据值的方法,你应该使用一个方法,而不是一个计算的 prop:
data() {
return {
projects: []
};
},
methods: {
loadProjects() {
console.log("Hello there")
this.projects = this.$store.getters.loadedProjects
}
}
这将获得this.$store.getters.loadedProjects 一次 的值并将其分配给您的本地项目值。现在,由于您使用的是 Vuex,您可能希望本地引用与您对存储值所做的更新保持同步。这是计算道具派上用场的地方。实际上,您根本不需要数据中的projects。你所需要的只是计算出来的道具:
computed: {
projects() {
return this.$store.getters.loadedProjects
}
},
现在 vue 会在商店更新时更新您对项目的本地引用。然后,您可以像在模板中使用普通值一样使用它。例如
<template>
<div v-for='item in projects' :key='item.uuid'>
{{item.name}}
</div>
</template>
避免计算属性中的副作用,例如直接赋值,计算值应该总是自己返回一个值。这可能是对现有数据应用过滤器,例如
computed: {
completedProjects() {
return this.$store.getters.loadedProjects.filter(x => x.projectCompleted)
},
projectIds() {
return this.$store.getters.loadedProjects.map(x => x.uuid)
}
}
你明白了..
更多关于将 vuex 状态引入组件的最佳实践:https://vuex.vuejs.org/guide/state.html
计算道具文档:
https://vuejs.org/v2/guide/computed.html