【问题标题】:Changing getter value using state value in Vuex在 Vuex 中使用状态值更改 getter 值
【发布时间】:2020-06-03 12:57:18
【问题描述】:

我有这个获取状态中一项的值的getter:

boxdata: state => {
      return state.boxchart.data
    },

现在我有另一个状态项用于更改 getter 的值

目前我在安装组件时执行此操作,但似乎数据有时会加载但有时不会:

computed: {
      ...mapGetters(["boxdata"]),
      ...mapState(['reference_fc'])
    },

mounted() {
 this.boxdata[0].chartOptions.series[0].data[0]=this.reference_fc.NSR.values
}

所以我想知道如何确保 boxdata getter 在组件第一次加载时已经更新?

【问题讨论】:

  • 您正在以 Vue 无法检测到的方式改变数据。请参阅 Vue 文档中的 Caveats

标签: vue.js vuejs2 vue-component vuex


【解决方案1】:

Vue 无法检测数组元素分配。这在Caveats 中有解释。

试试这个:

this.$set(this.boxdata[0].chartOptions.series[0].data, 0, this.reference_fc.NSR.values)

【讨论】:

  • 我应该在哪里使用它?在组件中的mounted()中?
【解决方案2】:

您不应该使用 getter 来改变数据。你应该使用mutations

Getter 仅用于根据存储状态获取派生状态。 see here

在你的店里:

mutations: {
  setBoxdata(state, value) {
     state.boxchart.data[0].chartOptions.series[0].data[0] = value;
  }
}

在你的组件中:

computed: {
  ...mapMutations("setBoxdata")
},
mounted() {
  this.setBoxData(this.reference_fc.NSR.values);
}

【讨论】:

  • 虽然通常只在突变中修改 Vuex 状态是一个好主意,但这个答案仍然存在与 OP 中相同的问题。如果您直接分配给数组元素,则 Vue 无法检测到它并且视图不会更新。这在Caveats 中有解释。
猜你喜欢
  • 2019-10-09
  • 1970-01-01
  • 2021-04-16
  • 2019-08-06
  • 1970-01-01
  • 2020-11-04
  • 2020-05-07
  • 2019-10-23
  • 1970-01-01
相关资源
最近更新 更多