【发布时间】:2019-12-02 01:34:20
【问题描述】:
我试图通过反应有条件地呈现按钮和编辑表单。我的代码背后的想法是,单击编辑按钮后,编辑和删除按钮会更改为保存和取消,并且最初由 get 方法填充的 h5(标题)字段更改为具有原始默认值的 textareas。我认为这可能是一个不错的方法,但我大错特错了。
const Users = () => {
const [users, setUsers] = useState({ list: [] });
const [edit, setEdit] = useState(false);
useEffect(() => {
axios
.get('/api/User')
.then(response => {
setUsers({list:response.data});
})
.catch(error => {
console.log(error);
})
}, []);
const handleDelete = (user) => {
axios
.delete(`/api/User/${user.id}`)
.then(response => {
console.log(response)
window.location.reload(true);
})
.catch(error => {
console.log(error)
})
}
const handleEdit = (user) => {
setEdit(true);
return (
<div className="section" key={user.id}>
<div className="divider"></div>
<textarea type="username" className="edit-userName" defaultValue={user.username}></textarea>
<textarea type="email" className="edit-userName" defaultValue={user.email}></textarea>
<Button className="btn-save" color="info" onClick={() => handleSave(user)}>Save</Button>
<Button className="btn-cancel" color="info" onClick={() => setEdit(false)}>Cancel</Button>
</div>
)
}
const handleSave = (user) => {
axios
.put(`/api/User/${user.id}`)
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error)
})
setEdit(false);
}
return(
<div className="container white">
<h3 className="center">
Manage Users
<Button className="btn-createUser" color="info">
<Link to='/signup'>New User</Link>
</Button>
</h3>
{users.list.map(user => (
<div className="section" key={user.id}>
<div className="divider"></div>
<h5 type='username' className="user-userName">{user.username}</h5>
<h5 type='email' className="user-userEmail">{user.email}</h5>
<Button className="btn-edit" color="info" onClick={() => handleEdit(user)}>Edit</Button>
<Button className="btn-delete" color="info" onClick={() => handleDelete(user)}>Delete</Button>
</div>
))}
</div>
);
}
export default Users;
跟进:我得到了渲染以将标题更改为 textareas 并且 put 现在正确命中端点,但是渲染将打开所有字段,而不是简单地打开我按下编辑的那个。
{users.list.map(user => (
<div className="section" key={user.id}>
<div className="divider"></div>
<h5 type='username' className="user-userName">{user.username}</h5>
<h5 type='email' className="user-userEmail">{user.email}</h5>
{edit ? (
<>
<textarea type="username" className="edit-userName" defaultValue={user.username}></textarea>
<textarea type="email" className="edit-userName" defaultValue={user.email}></textarea>
<Button className="btn-save" color="info" onClick={() => handleSave(user)}>Save</Button>
<Button className="btn-cancel" color="info" onClick={() => setEdit(false)}>Cancel</Button>
</>
) : (
<>
<Button className="btn-edit" color="info" onClick={() => handleEdit(user.id)}>Edit</Button>
<Button className="btn-delete" color="info" onClick={() => handleDelete(user.id)}>Delete</Button>
</>
)}
</div>
))}
</div>
【问题讨论】:
标签: reactjs axios react-hooks