使用 useState 和按钮更新数组中的对象
Update object in array using useState and a button
我有一个要维护的用户列表,
我能够从列表中删除用户并将新用户添加到列表中,
但是我无法更新现有用户。
从 'react'
导入 {useState}
常量 ChildComp = ()=>
{
const [users,setUsers] = useState([{name:"Leanne" ,age : "40", city : "Gwenborough",},
{姓名:“Ervin”,年龄:“35”,城市:“Wisokyburgh”,},
{姓名:“Clementine”,年龄:“22”,城市:“McKenziehaven”,}])
const [user,setUser] = useState({name : "" , age : 0, city :""})
const [deletUser,setDeletUser] = useState ("")
const deletMe =() =>
{
let array = [...users]
let index = array.findIndex(item=>item.name===deletUser)
if (index!==-1)
{
array.splice(index,1)
setUsers(array)
}
}
const Update = (e) =>
{
let array = [...users]
let index = array.findIndex(item=>item.name===deletUser)
if (index!==-1)
{
array.splice(index,1)
setUsers(array)
setUsers([...users,user])
}
}
return(<div>
<h1>add user </h1>
Name : <input type ="text" onChange = {e=> setUser({...user,name:e.target.value})}/><br/>
Age : <input type ="text" onChange = {e=> setUser({...user,age:e.target.value})}/><br/>
City : <input type ="text" onChange = {e=> setUser({...user,city:e.target.value})}/><br/>
<input type = "button" value ="Add" onClick ={e=>setUsers([...users,user])}/>
<input type ="button" value = "Update" onClick = {Update}/><br/>
<h3>Delet user </h3>
<input type = "text" name = "dleteUser" onChange = {e=>setDeletUser(e.target.value)}/>
<input type ="button" value = "DELET" onClick = {deletMe}/><br/>
<table border = "1">
{users.map((item,index) =>
{
return <tr key = {index}>
<td > {item.name} </td>
<td > {item.age} </td>
<td > {item.city} </td>
</tr>
})}
</table>
</div>
)
}
导出默认 ChildComp;
您可以通过首先获取该用户在数组中的索引,然后更新数组中的元素,然后 return 数组来更新用户:
const update = (e) => {
setUsers(users => {
const index = users.findIndex(item => item.name === user.name);
if (index === -1) {
return […users, user];
}
users[index] = user;
return users;
}
}
尽管只有在单击“删除”按钮时才会设置该变量,但您在更新函数中使用了“deletUser”。
您要使用的是 user-variable ,每当您更改其中一个 input-fields.
时设置
下面是一些更新用户条目的示例代码
const Update = () => {
setUsers(
users.map((existingUser) => {
return existingUser.name === user.name
? user
: existingUser;
})
);
};
p.s.: 由于您的 input-strings 后缀为 space(“Leanne”),您必须在输入字段中输入“Leanne”才能更改第一个条目.
我有一个要维护的用户列表, 我能够从列表中删除用户并将新用户添加到列表中, 但是我无法更新现有用户。
从 'react'
导入 {useState}常量 ChildComp = ()=> { const [users,setUsers] = useState([{name:"Leanne" ,age : "40", city : "Gwenborough",}, {姓名:“Ervin”,年龄:“35”,城市:“Wisokyburgh”,}, {姓名:“Clementine”,年龄:“22”,城市:“McKenziehaven”,}])
const [user,setUser] = useState({name : "" , age : 0, city :""})
const [deletUser,setDeletUser] = useState ("")
const deletMe =() =>
{
let array = [...users]
let index = array.findIndex(item=>item.name===deletUser)
if (index!==-1)
{
array.splice(index,1)
setUsers(array)
}
}
const Update = (e) =>
{
let array = [...users]
let index = array.findIndex(item=>item.name===deletUser)
if (index!==-1)
{
array.splice(index,1)
setUsers(array)
setUsers([...users,user])
}
}
return(<div>
<h1>add user </h1>
Name : <input type ="text" onChange = {e=> setUser({...user,name:e.target.value})}/><br/>
Age : <input type ="text" onChange = {e=> setUser({...user,age:e.target.value})}/><br/>
City : <input type ="text" onChange = {e=> setUser({...user,city:e.target.value})}/><br/>
<input type = "button" value ="Add" onClick ={e=>setUsers([...users,user])}/>
<input type ="button" value = "Update" onClick = {Update}/><br/>
<h3>Delet user </h3>
<input type = "text" name = "dleteUser" onChange = {e=>setDeletUser(e.target.value)}/>
<input type ="button" value = "DELET" onClick = {deletMe}/><br/>
<table border = "1">
{users.map((item,index) =>
{
return <tr key = {index}>
<td > {item.name} </td>
<td > {item.age} </td>
<td > {item.city} </td>
</tr>
})}
</table>
</div>
)
} 导出默认 ChildComp;
您可以通过首先获取该用户在数组中的索引,然后更新数组中的元素,然后 return 数组来更新用户:
const update = (e) => {
setUsers(users => {
const index = users.findIndex(item => item.name === user.name);
if (index === -1) {
return […users, user];
}
users[index] = user;
return users;
}
}
尽管只有在单击“删除”按钮时才会设置该变量,但您在更新函数中使用了“deletUser”。 您要使用的是 user-variable ,每当您更改其中一个 input-fields.
时设置下面是一些更新用户条目的示例代码
const Update = () => {
setUsers(
users.map((existingUser) => {
return existingUser.name === user.name
? user
: existingUser;
})
);
};
p.s.: 由于您的 input-strings 后缀为 space(“Leanne”),您必须在输入字段中输入“Leanne”才能更改第一个条目.