import "./styles.css";
import React, { useState } from "react";
export default function App() {
const [movie, setMovie] = useState();
const [director, setDirector] = useState();
const [list, setList] = useState([
{
movie: "",
director: ""
}
]);
const handler = () => {
setList([
...list,
{
movie: movie,
director: director
}
]);
setDirector("");
setMovie("");
};
const removeHandler = (del, index) => {
const newList = list.filter((item) => {
return item.movie !== del;
});
setList([newList]);
};
return (
<div className="App flex justify-between">
<div>
<input value={movie} onChange={(e) => setMovie(e.target.value)} />
</div>
<div style={{ marginTop: "2rem" }}>
<input value={director} onChange={(e) => setDirector(e.target.value)} />
</div>
<button style={{ marginTop: "2rem" }} onClick={handler}>
ADD
</button>
<div>
{list?.map((item) => {
return (
<div>
<ul>
<li key={item.movie}>
{item.movie}, {item.director}
<button onClick={() => removeHandler(item.movie)}>
Remove
</button>
</li>
</ul>
</div>
);
}) || []}
</div>
</div>
);
}
我尝试使用过滤器过滤出删除的列表,但它删除了整个列表点击删除按钮这里是codesandbox链接https://codesandbox.io/s/relaxed-feather-esbynl?file=/src/App.js:0-1423
第一个列表也是在没有onSubmit的情况下自动生成
3条答案
按热度按时间d7v8vwbk1#
列表删除逻辑中有几个逻辑错误。请尝试以下代码。
bsxbgnwa2#
演示:https://codesandbox.io/s/wonderful-paper-cq0ce7?file=/src/App.js:1025-1300
从
setList([newList])
上拆下支架作为建议:
splice
用于从数组中删除项x一个一个一个一个x一个一个二个x
swvgeqrz3#
我建议你试试这个:
“newList”将返回一个新数组,其中不包含与您作为参数传递的数组具有相同“movie”的数组。