【发布时间】:2020-04-28 13:59:53
【问题描述】:
我有一个尝试进行后续更新的 mutator:
state.forms[1].data.metrics.push(newArrayItem)
-
forms是一个以1为键的对象 -
metrics是一个数组
由于某种原因,Vuex 成功更新,但组件没有对此更改做出反应。
我在 https://vuejs.org/v2/guide/list.html#Object-Change-Detection-Caveats 上阅读了有关 Vue.set() 的信息
但我不确定如何应用它,或者即使它在这里完全是正确的答案。
感谢您的帮助。
this.$forceUpdate 正在工作,这有点奇怪,因为加载数据的组件使用了computed 属性。
表单状态最初是这样设置的:
const state = {
forms: {}
};
新表单是这样推送的:
state.forms[id] = { formName: payload.formName, data: {metrics: []}};
新的指标是这样添加的:
var result = getParent(state, payload.path);
result.metricParent.data.metrics.push({ id: newMetricId(state, result.formId), ...payload.metric });
【问题讨论】:
-
你能发布一下状态数据最初是如何设置的吗?
-
我添加了详细信息。另外,我有一个表单列表,当我在商店中只有一个表单时它起作用了,当事情发生时我添加了“表单”对象。在这里使用动态模块并一次只加载一个表单是一个更好的主意吗?
-
如果您在任何时候以 Vue 无法观察到的方式改变数据,那么它可能导致不更新视图的突变。见change detection caveats。例如,
state.forms[id] = ...已经是违规行为。 -
@DecadeMoon 对,我知道,问题是当我需要推送到指标数组时,我不确定如何组合修复(使用 Vue.set 进行数组)通过表单数组访问它。我想我使用动态模块解决了我的问题,但如果你有一个好主意如何组合这些,请告诉我。我什至尝试重新创建数组,推送,然后分配给 state.forms[index],但这也没有用。