使用splice时出现Uncaught TypeError: 无法赋值给数组只读属性'0'
解决"Cannot assign to read only property '0' of object '[object Array]'"错误
这个报错的核心原因是你试图修改一个只读数组——event.events被标记为不可修改,直接用splice原地修改它就会触发这个错误。
你的代码里用forEach遍历,而且只是原地修改原数组,但对于只读数据来说,必须通过创建新对象/新数组的方式来更新,不能直接改动原数据。
修正后的代码可以这样写:
// 用map返回新的数组,而不是原地修改原数据 const updatedEventColumns = eventColumns.map((event) => { if (event._id === source.droppableId) { // 创建新的events数组,排除掉指定索引的元素 const updatedEvents = [ ...event.events.slice(0, source.index), ...event.events.slice(source.index + 1) ]; // 返回新的event对象,保持其他属性不变,替换events为新数组 return { ...event, events: updatedEvents }; } // 不匹配的项直接返回原对象 return event; });
代码说明:
- 用
map代替forEach:map会返回一个全新的数组,不会改动原有的eventColumns - 创建
updatedEvents:通过slice方法截取原数组的前后部分并拼接,得到去掉指定索引元素的新数组(slice不会修改原数组) - 返回新的event对象:用展开运算符
...复制原event的所有属性,再替换events为新数组,这样不会修改原有的只读对象
内容的提问来源于stack exchange,提问作者Basher Mansour
相关产品推荐
相关产品推荐

