vue.js - Vuejs 不会在 Vuex 突变时更新 DOM
问题描述
我将 Vue3 与 Quasar2 一起使用,但在突变期间遇到问题:DOM 未更新。
- 该代码由一个父组件、一个子组件列表(由 v-for 渲染)组成。数据通过计算属性来自 Vuex 存储。
- 子组件仅表示数据,并使用所表示数据的 id 发出一个“编辑”事件。
- 在“编辑”事件上,父组件用实际数据填充属性,并显示一个对话框。
- 当对话框关闭时,父级调用一个动作来存储数据。
- 动作(和以下突变)正常执行。Vuex 存储包含正确的数据。
- 但是列表没有更新:(
- 如果我向数据列表添加一个新元素(通过推送),那么列表将被更新。
清除的来源如下:
父.vue:
<template>
<q-page class="flex flex-center" :key="mykey">
<q-list padding>
<child-component
v-for="d in data"
v-bind:key="d.id"
v-bind:data="data"
v-on:edit-time="onEdit"
>
</program>
</q-list>
<!-- EDITOR DIALOG -->
<q-dialog v-model="editing" @hide="onEditDone">
....
</q-dialog>
<script>
....
export default defineComponent({
name: "PageIndex",
created: function () {
this.loadData();
},
data: function () {
return {
editing: false,
....
},
};
},
components: { Child },
methods: {
...mapActions(["loadData", "updateData"]),
onEdit(id) {
...
this.editing = true; // <= show dialog
},
onEditDone() {
try {
...
this.updateData(data); // <== Vuex Action which updates an elem of the data list
} catch (e) {
...
}
},
},
computed: {
...mapState({
data: state => state.data
}),
}
});
</script>
state.js:
export default {
data: [],
}
getters.js:
const getters = {
data: (state) => {
return state.data;
},
};
export default getters;
突变.js:
updateData: (state, data) => {
var idx = state.data.findIndex((element) => element.id == data.id);
state.data.splice(idx, 1, data);
},
动作.js:
async updateData(context, data) {
try {
await axios.post(`api/data?id=${data.id}`, data, {
headers: {
"Content-Type": "application/json",
},
});
context.commit("updateData", data)
} catch (err) {
console.log(err);
}
},
解决方案
推荐阅读
- c# - 无法加载文件或程序集 'Npgsql, Version=4.0.5.0,culture=neutral...' 或其依赖项之一。仅在任务计划程序中发生
- gpu - QueryperformanceFrequency 和 QueryperformanceCounter 快速排序 GPU 编程 OpenCL
- c# - 使用 SemaphoreSlim 锁定 C# 任务
- javascript - Firefox 中的负向 Lookbehind
- arrays - Angular - 删除我在表单组中添加的最后一个数组
- python - 如何使用正则表达式从字符串中获取文件名
- javascript - 如何在与 html 不同的文件中编写 Paper.js 脚本?(我已按照图书馆的说明进行操作,但仍然无法正常工作)
- java - 在 Java 中将 XML 文件转换为 JSON 文件的最快方法是什么?
- python - 附加到默认的 __str__ 输出实现
- c# - NPoco - 包含 IncludeMany 和其他包含 (ASP NET MVC)