javascript - arr.splice() 方法删除反应原生项目中的错误项目
问题描述
我正在用 react-native 制作一个待办事项应用程序。我做了一个删除按下任务的功能,但是当我按下时,它会删除列表中的第一个项目,而不是我按下的那个。这是我使用的代码:
let id = 0;
const [task, setTask] = useState("");
const [taskList, setTaskList] = useState([
{ name: "Add your first task", id: id++ },
]);
const handleTask = (e) => {
e.preventDefault();
setTaskList([...taskList, { name: task, id: id++ }]);
setTask("");
};
function completeTask(index) {
let itemsCopy = [...taskList];
itemsCopy.splice(index, 1);
setTaskList(itemsCopy);
}
{taskList.map((taskList, index) => {
return (
<View style={styles.wrapper}>
<View style={styles.text}>
<TouchableOpacity key={index} onPress={completeTask}>
<Text> {taskList.name} </Text>
</TouchableOpacity>
</View>
</View>
);
})}
解决方案
completeTask
调用和更新状态错误的方式时,您不会传递索引。
onPress={() => completeTask(index)}
function completeTask(index) {
setTaskList((preTasks) => preTasks.filter((item, i) => i !== index));
}
推荐阅读
- python - 如果缺少使用 python 读取字典的键/值,则 SQL 插入 null
- javascript - 当我们使用自动缩放订阅服务时,RabbitMQ 订阅获取重复消息
- orm - 如何处理 sqlalchemy 中的事务或以不推荐的方式禁用它们
- sharepoint - 如何在 Sharepoint Web 部件中使用 MSAL 库获取 accessToken?
- reactjs - 反应js材料ui treeView更改树项标签的文本颜色
- unit-testing - axios-mock-adapter error 错误:预检响应具有无效的 HTTP 状态代码 403
- java - 如何从设置 OnItemClickListener 和 OnItemLongClickListener 的 listView 上的 textView 中选择/单击文本
- azure - 如何查看 Azure 管道中实际发生的测试执行 UI?
- ios - Apple Store - 拒绝使用 UIWebView 的新应用;这会影响我现有的应用程序和未来的版本吗?
- ios - 在服务器上收到的请求为空