reactjs 删除任何列表将从待办事项应用程序中删除全部数据

mnemlml8  于 2022-12-22  发布在  React
关注(0)|答案(3)|浏览(182)
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的情况下自动生成

d7v8vwbk

d7v8vwbk1#

列表删除逻辑中有几个逻辑错误。请尝试以下代码。

const removeHandler = (item, index) => {
    const newList = list.filter((list) => {
      return item !== list.movie;
    });

    setList(newList);
  };
bsxbgnwa

bsxbgnwa2#

演示:https://codesandbox.io/s/wonderful-paper-cq0ce7?file=/src/App.js:1025-1300
setList([newList])上拆下支架

setList(newList);

作为建议:splice用于从数组中删除项
x一个一个一个一个x一个一个二个x

swvgeqrz

swvgeqrz3#

我建议你试试这个:

const removeHandler = (del, index) => {
     const newList = list.filter((item) => {
        return item.movie !== del;
     });
     setList(newList);
};

“newList”将返回一个新数组,其中不包含与您作为参数传递的数组具有相同“movie”的数组。

相关问题