vue.js - 状态更改时更新 getter 值 Vuex 存储
问题描述
我试图弄清楚当来自 VueX 的其他变量更改/更新时如何正确更新 getter 值。目前我在组件中使用这种方式进行更新:
watch: {
dates () {
this.$set(this.linedata[0].chartOptions.xAxis,"categories",this.dates)
}
}
因此,每当日期更改时,我的 getterlinedata
都应该使用值进行更新。是来自 VueX 商店的状态变量。问题是使用这种方法时,当我更改路线/转到不同的组件时,值不会正确更新。所以我认为最好使用 VueX 商店来做这种事情。dates
dates
dates
使用 API 调用进行更新,因此我使用操作来更新它。所以问题是如何从 VueX 商店进行这样的更新?
编辑:
我尝试将其移至 VueX:
async loadData({ commit }) {
let response = await Api().get("/cpu");
commit("SET_DATA", {
this.linedata[0].chartOptions.xAxis,"categories": response.data.dates1,
this.linedata[1].chartOptions.xAxis,"categories": response.data.dates2
});
}
SET_DATA(state, payload) {
state = Object.assign(state, payload);
}
但是上面的方法不起作用,因为我不能以这种方式设置嵌套对象......
解决方案
Getter 通常用于获取,而不是设置。它们就像为 Vuex 计算的一样,返回计算的数据。当反应内容发生变化时,它们会自动更新。因此,最好重新考虑设计,以便只更新状态。无论哪种方式,Vuex 都应该只使用动作/突变来更新
鉴于您的示例和所有评论中的信息,使用linedata
状态,您的操作和突变将如下所示:
actions: {
async loadData({ commit }) {
let response = await Api().get("/cpu");
commit('SET_DATA', response.data.dates);
}
}
mutations: {
SET_DATA(state, dates) {
Vue.set(state.linedata[0].chartOptions.xAxis, 'categories', dates[0]);
Vue.set(state.linedata[1].chartOptions.xAxis, 'categories', dates[1]);
}
}
您可以在组件中调用它,例如:
this.$store.dispatch('loadData');
在这种情况下,使用Vue.set
对于变更检测是必要的,并且需要以下导入:
import Vue from 'vue';
从理论上讲,应该有更好的方法来设计您的后端 API,以便您可以设置state.linedata = payload
突变,但这将适用于您所拥有的。
推荐阅读
- javascript - django:提交和下载表单后出现 javascript 重定向问题
- c# - 使用 ChangeDisplaySettingsEx 以编程方式更改相对显示器位置?
- c++ - 如何在 C++ 中创建对象列表并使用其方法?
- wordpress - 列未采取 elementor pro 中指示的措施
- r - 让用户在 R Shiny 中编辑数据表变量名称
- python - 为什么我的 Jupyter 给我一个在 f2py 中编译的 fortran 代码的 ModuleNotFound 错误?
- ios - 无法验证 iOS 存档以在试飞中分发
- laravel - 如何检查静态复选框的值是否与 Laravel 数据库中的值相等
- python - 在python中将TI TMS320C30 32位浮点数转换为IEEE浮点数
- docker - 如何使用 Google Cloud Build 从主机访问 Docker 映像中的文件