javascript - 尝试删除时,React 列表会删除错误的项目

标签 javascript reactjs ecmascript-6

我使用 React 创建了一个待办事项列表,一切正常,直到我尝试实现删除功能。

每当我尝试删除一个项目时,React 都会删除除该项目之外的所有其他内容。我检查了我的代码,但无法弄清楚可能是什么原因。单击某个项目时,控制台日志会返回正确的对象。我有一种感觉,这可能与键值不唯一或我的代码的分解方式有关。为了更好地说明我遇到的问题,我创建了一个 codepen .

Edit 6130nmwlmk

最佳答案

splice() 实际上做了两件事,实际上它有副作用返回。您期望原始数组返回(可以理解),但 splice() 实际上返回从初始数组 ( mdn ) 中 切碎 的项目数组。因此,变量 tasks 被设置为从待办事项列表项的初始状态中删除的待办事项列表项数组。

你想要的本质上只是副作用。您可以看到更新的CodeSandbox here ,但我所做的只是创建当前状态的副本,然后在该副本上使用 splice() ——此时我们仅使用 splice() 的副作用方面。

const tasks = this.state.tasks.slice(); // copy of current todo list
tasks.splice(index, 1); // "splice" out the list item we want to delete, but don't return a new list

this.setState({ tasks });

关于javascript - 尝试删除时,React 列表会删除错误的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49823707/

相关文章:

javascript - Rails 3 转义 html 标签在浏览器中作为 JSON 时未转义

Javascript 滚动功能缓慢,Chrome 中出现大量 "Timer Fired: onloadwff.js:310"黄鼠狼事件

javascript - React 组件从 props 初始化状态

reactjs - 在React组件生命周期方法中, `this.context`是一个空对象

javascript - import 与 typescript 1.6 和 es6 语法的内联使用

javascript - 找不到模块 '@angular-devkit/core'

javascript - 如何在 API 调用的 header 中包含 AuthToken?

javascript - 无法看到node js程序的延迟

javascript - react-query:仅在状态变量更改时重新获取查询

javascript - 扩展 Error 对象时是否需要 super(originalError)?