获取正确event.currentTarget:列表排序与删除异常问题排查
问题分析与解决
问题核心:
handleResetCreated函数的逻辑完全错配
你在createdNotesSort里是按note的类型值维护createdNotes数组的(数组存的是具体的typeNote数值),但handleResetCreated里却把按钮的value当成了数组索引去过滤元素,这就导致删除的项和你点击的按钮完全不对应。比如数组是[5,3,2]时,若按钮value是3,你会尝试删除索引为3的元素(但数组只有3个元素,索引最大为2),等于没删;若按钮value是2,会删除索引2的元素(也就是数组里的2),这时候碰巧生效,但换其他情况就会出错。修复方案:把
handleResetCreated改成和第一个函数一致的按值过滤逻辑,代码调整如下:
handleResetCreated = (e) => { const { createdNotes } = this.state; let typeCreated = +e.currentTarget.value; // 改为按值过滤,和createdNotesSort的删除逻辑统一 const newCreatedNotes = createdNotes.filter(val => val !== typeCreated); this.setState({ createdNotes: newCreatedNotes, }, () => { this.reloadData() }) };
如果你原本想按索引删除,那要确保按钮的value绑定的是数组的索引而非note类型值,但更推荐按值删除——因为数组会随排序、增删改变索引,用索引维护更容易出问题。
内容的提问来源于stack exchange,提问作者Elichy
相关产品推荐
相关产品推荐

