【发布时间】:2020-03-22 10:59:54
【问题描述】:
我已经在 Vuex 应用程序中对我的数据进行了标准化,但我无法找到有关如何查看数据以进行更改的答案。例如,这是我的设置的简化版本。
状态:
const state = {
shapes: {
collection: [1, 2, 3],
data: {
1: {
type: 'circle',
isActive: false,
},
},
}
}
吸气剂:
const getters = {
findShape: (state) => (id) => {
return state.shapes.data[id];
}
allShapes: (state, getters) => {
return state.shapes.collection.map(id => getters.findShape(id));
}
}
在我的组件中,我在计算属性中调用 allShapes getter,并通过 v-for 将形状向下传递给子组件。
computed: {
shapes() {
return this.$store.getters.allShapes;
}
}
添加和删除形状可以正常工作。问题是每当我更新数据对象中的属性时,更改都不会反映在我的组件中。这是我设置 isActive 属性的突变:
const mutations = {
setActive(state, shape) {
Vue.set(state.shapes.data[shape.id], 'isActive', shape.isActive);
}
}
随后引用 isActive 属性的任何组件都不会得到更新。我明白为什么会发生这种情况,但除了回到嵌套数组结构之外,我还没有找到解决方案。当数据对象发生变化时,有没有办法在 allShapes getter 中触发更新?还是有其他方法可以将数据拉入我的组件以使其具有反应性?
【问题讨论】: