【发布时间】:2018-05-11 16:10:17
【问题描述】:
所以我有一个带有一些变量的 Vuex 存储,它看起来像这样:
var dataStore = new Vuex.Store({
state: {
consumer_id: undefined,
some_other_data: 0
},
mutations: {
update: function(type, payload) {
state = Object.assign(type, payload);
}
}
});
我有两个组件,它们都是顶级的 Vue 组件。但是MultiSim 包围Sim。他们都使用以下方法访问consumer_id:
consumer_id: {
get: function () {
return this.$store.state.consumer_id;
},
set: function (value) {
this.$store.commit('update', {consumer_id: value});
}
},
问题在于,虽然对consumer_id 的更改会传播到Sim,但MultiSim 只会看到undefined(默认值)。 MultiSim 更改 consumer_id,这被所有三个组件正确捕获,但如果 Sim 更改,MultiSim 不会更新。
例如:
-
MultiSim设置consumer_id = 10。 [MultiSim: 10, Sim: 10, Store: 10]-
Sim设置consumer_id = 5。 [MultiSim: 10, Sim: 5, Store: 5]
谁能看出我哪里出错了?有没有办法强制更新所有组件?
编辑:
所以我找到了一个解决方案,但它更像是一种 hack:
-
MultiSim设置consumer_id = 10。 [MultiSim: 10, Sim: 10, Store: 10]-
Sim设置consumer_id = 5。 - `[MultiSim: this.$store.state.consumer_id /* 5 */, Sim: 5, Store: 5]
本质上,MultiSim 的计算方法并没有更新,即使它可以正常访问实际存储的值。
【问题讨论】:
-
你的变异看起来不对。
state看起来不像它会被定义(在你的情况下,状态是type)。此外,如果没有replaceStateIIRC,您将无法替换整个状态。 -
我尝试过使用
Vue.set(profitSimulatorStore.$store.state, k, payload[k]);,但遇到了未定义的错误。你有Vue.set语法的例子吗?