当输入一个已有的数值时报出了以下错误:vue.runtime.esm.js:619 [Vue warn]: Duplicate keys detected: '1'. This may cause an update error. found in ---> <ElTableBody> <ElTable> at packages/table/src/table.vue <Directory> at src/views/business/directory/index.vue <AppMain> at src/layout/components/AppMain.vue <Layout> at src/layout/index.vue <App> at src/App.vue <Root>
时间: 2024-04-11 13:33:21 浏览: 276
这个错误通常是由于在`<el-table>`中使用了重复的数据键值导致的。
在你的代码中,当输入一个已有的数值时,校验函数`checkDirectoryId`会触发错误提示,但是并没有阻止重复的数据键值被添加到`existingDirectoryIds`数组中。这可能导致在渲染`<el-table>`时出现重复的键值,从而引发报错。
为了解决这个问题,你可以在将数值添加到`existingDirectoryIds`数组之前进行判断是否已经存在相同的数值。修改`checkDirectoryId`函数如下:
```javascript
methods: {
checkDirectoryId(rule, value, callback) {
const existingDirectoryIds = [];
for (let i = 0; i < this.tableData.length; i++) {
if (!existingDirectoryIds.includes(this.tableData[i].directoryId)) {
existingDirectoryIds.push(this.tableData[i].directoryId);
}
}
console.log(existingDirectoryIds)
if (existingDirectoryIds.includes(value)) {
callback(new Error('该目录ID已存在'));
} else {
callback();
}
}
}
```
通过添加判断条件`!existingDirectoryIds.includes(this.tableData[i].directoryId)`,确保只有当`existingDirectoryIds`数组中不存在相同的数值时才将数值添加到数组中。这样可以避免重复的键值出现,从而解决报错问题。
阅读全文