javascript - 如何使用 react redux 更新用户信息?
问题描述
我正在学习 react-redux,我正在使用 JSON 占位符创建一个简单的 CRUD 应用程序,现在我可以使用 post 和 delete 方法显示数据和删除数据,但我不知道如何在 redux 中使用 put 方法更新数据,我需要帮助。
**
这是沙盒中的现场演示:redux live demo
**
这是我到目前为止所拥有的,用户组件(只是代码的一部分)
return(
<div>
<table id="users">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Action</th>
</tr>
</thead>
{userData &&
userData.users &&
userData.users.map(user =>
<tbody>
{user.editing ? <UserForm user={user} key={user.id} />:
<tr key={user.id}>
<td>{user.id}</td>
<td>{user.name}</td>
<td>
<button key={user.id} type="button" className="btn btn-danger btn-link" onClick={() => deleteUser(user.id)}>
<i className="material-icons">delete</i>
</button>
<button key={user.id} type="button" className="btn btn-success btn-link" onClick={() =>editUser(user.id)}>
<i className="material-icons">edit</i>
</button>
</td>
</tr>
}
</tbody>
)}
</table>
</div>
)
这是userfom组件
import React from 'react'
import { useForm } from "react-hook-form";
function UserForm() {
const { edit, handleSubmit} = useForm();
return (
<div>
<form onSubmit={handleSubmit}>
<input name="name" defaultValue="test" ref={edit} />
<input type="submit" />
</form>
</div>
)
}
export default UserForm
这是减速器中的编辑用户
case ActionTypes.EDIT_USER:
return{
...state,
users:state.users.map((user)=>user.id === action.payload ? {
...user,editing:!user.editing
}:user)
}
现在,当我单击编辑并提交数据时,它会刷新页面并且用户信息中没有任何更新(在此处实时查看
我的代码有什么问题?
解决方案
好吧,我对 react-hook-form 了解不多,但我会尽力帮助您,首先您需要将一个函数传递给您的“handleSubmit”,否则我认为您不会阻止默认行为提交时,我的意思是 handleSubmit 函数不执行“event.preventDefault()”,因此您可以将以下内容放在 useForm 挂钩下方:
const onSubmit = data => {
console.log(data);
}
然后在您的 jsx 中,您将拥有
<form onSubmit={handleSubmit(onSubmit)}>
我不确定,因为正如我告诉你的那样,我不使用 react-hook-form,但我认为我看到的另一个错误是你正试图从 useForm 钩子中获取“编辑”属性,那不会不起作用,您没有在那里声明变量,您正在尝试从 useForm 挂钩访问属性,因此为了跟踪输入的更改,您应该使用“注册”,我的意思是您应该有以下代码:
const { register, handleSubmit } = useForm();
您应该使用以下内容更新您的 jsx:
<input name="name" defaultValue="test" ref={register} />
现在,每次提交时,您的表单都会包含我们在 onSubmit 函数中添加的 console.log 中的更改。您已经将 redux 与您的 Users 组件连接起来,我的意思是您正在使用 mapDispatchToProps ,因此在您的 Users 组件中,您将能够访问 edit 道具以调度 editUser 操作。因此,为了继续使用 redux,您可以通过 this.props.editUser 将该道具传递给您的 UserForm 组件并继续。另一种选择是将 UserForm 组件与 redux 连接并访问 editUser 属性。
推荐阅读
- excel - PasteSpecial 函数在 Excel 中不起作用
- javascript - 如何将 base64 转换为 html 文件?
- c# - 为什么使用 stackalloc 分配的内存在超出范围时不会被释放?
- scala - 一些 RDD 操作因 Java IllegalArgumentException 而失败
- mysql - 如何获得列的所有值的乘积?
- tfsbuild - TFS 构建定义中的“队列 Jenkins 作业”中的“取消链接”按钮有什么作用
- mysql - LEFT OUTER JOIN 与第二张表上的 WHERE 子句,不影响第一张表
- c# - 当我第一次输入输入(名称)时,消息不显示名称。我必须再次按 Enter 才能显示带有名称的消息
- bitbucket - Atlassian JavaScript 加载错误我们尝试加载脚本但出了点问题
- netsuite - 如何使用 java api 从 Netsuite 获取项目列表