且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用钩子从数组中删除对象(useState)

更新时间:2022-10-19 10:21:58

首先,带有点击事件的 span 元素需要有一个 name 属性,否则,e.target 中将找不到名称.话虽如此,e.target.name 是为表单元素(输入、选择等)保留的.因此,要实际使用 name 属性,您必须使用 e.target.getAttribute("name")

另外,因为你有一个对象数组,所以使用 list.indexOf(e.target.name) 是无效的,因为它正在寻找一个 string> 当您迭代对象时.这就像在 [{}, {}, {}]

中找到dog"

最后,array.slice() 返回一个新数组从您传递给它的索引处的项目开始.因此,如果您点击最后一项,您将只能返回最后一项.

使用 .filter() 尝试类似的操作:codesandbox

import React, { useState } from "react";从react-dom"导入 ReactDOM;导入./styles.css";const App = () =>{const defaultList = [{名称:ItemOne"},{名称:项目二"},{名称:项目三"}];const [list, updateList] = useState(defaultList);const handleRemoveItem = (e) =>{const name = e.target.getAttribute("name")updateList(list.filter(item => item.name !== name));};返回 (<div>{list.map(item => {返回 (<><span name={item.name} onClick={handleRemoveItem}>X</span><span>{item.name}</span></>);})}