javascript - 我怎样才能删除反应js中的元素
问题描述
我想用 react js 创建一个简单的应用程序,它应该在显示器中显示用户,然后当我点击删除按钮时,它应该删除以下项目,但是我有一些错误。
import React, { useEffect, useState } from 'react'
const App = () => {
const [users, setUsers] = useState([])
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then((response) => response.json())
.then((users) => {
setUsers(users);
})
}, [users]);
const deleteMe = () => {
setUsers(prevState => {
return prevState.filter(e => e.name)
})
}
return (
<>
{users.map((user) => {
return (
<>
<div> {user.name}
<button onClick={deleteMe}> Delete </button>
{/* <button onClick={}> Update </button> */}
</div>
</>
)
})}
</>
)
}
export default App
解决方案
要删除用户,回调 ( onClick
) 必须有足够的信息来识别要删除的用户。
在此示例中,您有一些选择:
- 按名称删除。仅当用户名唯一时:
const deleteMe = (userName) => {
setUsers(prevState => {
return prevState.filter(e => e.name !== userName)
})
}
return (
<>
{users.map((user) => {
return (
<>
<div> {user.name}
<button onClick={() => deleteMe(user.name)}> Delete </button>
{/* <button onClick={}> Update </button> */}
</div>
</>
)
})}
</>
)
- 由元素本身移除。仅当元素在数组中不重复时(对象本身):
const deleteMe = (user) => {
setUsers(prevState => {
return prevState.filter(e => e !== user)
})
}
return (
<>
{users.map((user) => {
return (
<>
<div> {user.name}
<button onClick={() => deleteMe(user)}> Delete </button>
{/* <button onClick={}> Update </button> */}
</div>
</>
)
})}
</>
)
- 按数组索引删除。仅当状态是数组时,通常:
const deleteMe = (userIndex) => {
setUsers(prevState => {
return prevState.filter((e, i) => i !== userIndex)
})
}
return (
<>
{users.map((user, i) => {
return (
<>
<div> {user.name}
<button onClick={() => deleteMe(i)}> Delete </button>
{/* <button onClick={}> Update </button> */}
</div>
</>
)
})}
</>
)
了解如何将第二个参数i
添加到map
andfilter
函数中。这通常被忽略,但有时它可能很有用。
由于如果在渲染和回调之间添加/删除元素的数组重新排序,则此方法可能会失败,因此除非没有其他选择,否则我不会推荐它。
推荐阅读
- whoosh - 带有字段过滤器的多字段搜索嗖嗖声
- java - 从 S3 下载 Thymeleaf 模板
- javascript - 减少方法不清楚
- android - Jackson 未能反序列化 Kotlin 类
- mongodb - Mongodb:使用字段作为对象数组进行查找
- javascript - 如何使用 puppeteer 下载当前页面的 pdf
- c# - 如何在 Blazor 服务器端应用程序中从本地 Active Directory 实施身份验证?
- c# - 自动完成(字符串和整数)的一个时髦的东西
- c++ - Pytorch C++ RuntimeError:设备类型为 cuda 的预期对象,但在调用 _th_index_select 时获得了参数 #1 'self' 的设备类型 cpu
- django - 在 Django 模型中进行迁移时出现“外键不匹配”错误