【发布时间】:2021-03-13 02:42:24
【问题描述】:
我正在尝试删除数组中的一项。但是,我的删除按钮没有执行我的代码,并且数组保持不变。我不知道该怎么办。
我的代码如下:
//App.js
import React, { useState } from "react";
import Overview from "./components/Overview";
function App() {
const [task, setTask] = useState("");
const [tasks, setTasks] = useState([]);
function handleChange(e) {
setTask(e.target.value);
}
function onSubmitTask(e) {
e.preventDefault();
setTasks(tasks.concat(task));
setTask("");
}
//error happening here????---------------------------------------------------
function removeTask(itemId) {
setTasks(prevState => prevState.filter(({ id }) => id !== itemId));
}
return (
<div className="col-6 mx-auto mt-5">
<form onSubmit={onSubmitTask}>
<div className="form-group">
<label htmlFor="taskInput">Enter task</label>
<input
onChange={handleChange}
value={task}
type="text"
id="taskInput"
className="form-control"
/>
</div>
<div className="form-group">
<button type="submit" className="btn btn-primary">
Add Task
</button>
</div>
</form>
<Overview tasks={tasks} removeTask={removeTask} />
</div>
);
}
export default App;
子组件:
import React from "react";
function Overview(props) {
const { tasks, removeTask } = props;
console.log(tasks)
return (
<>
{tasks.map((task, index) => {
return (
<>
<p key={index}>
#{index + 1} {task}
</p>
//this onClick isn't doing anything-------------------------------------
<button onClick={() => removeTask(index)}>Delete Task</button>
</>
);
})}
</>
);
}
export default Overview;
我的“任务”状态给了我一个数组,里面的项目是字符串。但是,当我尝试过滤数组时,它不起作用。因此,我没有按值过滤,而是尝试按 id/index 过滤。由于索引会匹配它,我认为这会从数组中删除该项目,即使只有一个项目,它也不会删除任何内容,并且删除按钮只是控制台记录给定的数组。
任何帮助将不胜感激。
【问题讨论】:
标签: reactjs react-hooks react-functional-component