Vue.js数组重排序时报Cannot read properties of undefined (reading '$set')如何解决
错误原因
- $set调用格式错误:
$set是Vue实例挂载的方法,不属于数组/对象的子属性。你代码中this.Documents.document_number本身是不存在的属性(Documents是数组,没有直接的document_number键),值为undefined,调用undefined的$set方法自然抛出该报错。 - 冗余且有风险的索引查找逻辑:你通过filter得到的filteredDocuments数组的项本身就是原Documents数组的对象引用,不需要再通过id查找原数组索引;且如果数组出现重复id(如你给出的示例中document3和document4的id均为4),findIndex永远只会匹配到第一个符合条件的项,会导致修改错误。
修复后的实现代码
reorderDocuments(deleted_document_number){ // 遍历所有序号大于被删除文档的条目 this.Documents.forEach(doc => { if (doc.document_number > deleted_document_number) { // 正确调用$set修改响应式属性,参数顺序为:目标对象、属性名、新值 this.$set(doc, 'document_number', doc.document_number - 1) } }) }
补充说明
如果你的项目是Vue3,不需要使用$set保证响应性,直接修改属性即可:
doc.document_number = doc.document_number - 1
内容的提问来源于stack exchange,提问作者iSnuff
相关产品推荐
相关产品推荐

