reactjs - React:我想提交一个表单并想通过钩子(useSelector和useDispatch)将数据保存在redux store中
问题描述
React:我想提交一个表单,并希望通过钩子(useSelector 和 useDispatch)将数据保存在 redux 存储中,如果需要其他内容,请告诉我我会上传我在这个问题上需要这个帮助,我将不胜感激
import React, { useState } from "react";
import { useDispatch } from "react-redux";
import {
Button,
Form,
FormGroup,
Label,
Input,
Container,
Col
} from "reactstrap";
import "./style.scss";
import { addUserAction } from "../../store/reducers/registerReducer.js";
const Register = () => {
const [user, setUser] = useState("");
const usedispatch = useDispatch();
const addUser = user => usedispatch(addUserAction(user));
const submitHandler = e => {
e.preventDefault();
console.log(user);
if (user.trim() === "") return;
addUser(user);
};
const onChange = e => {
//console.log(e.target.value);
setUser(e.target.value);
};
return (
<Container className="register">
<h2>Register</h2>
<Form onSubmit={submitHandler} className="form">
<Col>
<FormGroup>
<Label>Full Name</Label>
<Input
type="text"
name="fullname"
id="fullname"
value={user.fullname}
placeholder="Full Name"
onChange={onChange}
/>
</FormGroup>
</Col>
<Col>
<FormGroup>
<Label>Email</Label>
<Input
type="email"
name="email"
value={user.email}
id="email"
placeholder="myemail@email.com"
onChange={onChange}
/>
</FormGroup>
</Col>
<Col>
<FormGroup>
<Label for="examplePassword">Password</Label>
<Input
type="password"
name="password"
value={user.password}
id="password"
placeholder="********"
onChange={onChange}
/>
</FormGroup>
</Col>
<Button>Submit</Button>
</Form>
</Container>
);
};
export default Register;
//////////////////////////////////////////////////////////////// reducer
const initialState = {
fullname: "",
email: "",
password: ""
};
function userRegister(state = initialState, action) {
switch (action.type) {
case "ADD_USER":
return {
...state
};
default:
return state;
}
}
export default userRegister;
// Actions
export const addUserAction = user => ({
type: "ADD_USER",
payload: user
});
React:我想提交一个表单,并希望通过钩子(useSelector 和 useDispatch)将数据保存在 redux 存储中,如果需要其他内容,请告诉我我会上传我在这个问题上需要这个帮助,我将不胜感激
解决方案
您的user
状态是一个字符串,并作为字符串更新。但是您正在将其作为对象访问user.fullname
。
其次,您使用空的用户对象而不是表单值提交您的 redux 操作:
addUser({
fullname: "",
email: "",
password: ""
});
要么更改您的表单以useState
对每个值使用不同的 ',要么更好地将当前user
状态更改为对象。然后改为发送该对象:
const [user, setUser] = useState({
fullname: "",
email: "",
password: ""
});
const onChange = e => {
setUser({...user, [e.target.name]: e.target.value});
};
addUser(user);
最后,您没有在减速器中使用有效负载,只是返回状态。通过像这样返回它来保存用户:
case "ADD_USER":
return action.payload;
推荐阅读
- python - 我在制作 pyautogui 程序时遇到了 windows 错误和 os 错误
- flutter - 在计时器的重复回调中产生 BLoC 状态
- java - Cucumber StepDifinition 处的 NULL 指针异常
- python - 错误:没有为对象类型命名为 1 的轴
在 DataFrame 上的 python forloop - nunit - NUnit3 中是否有像我们在 TestNG 中一样的 DataProvider 概念?
- javascript - 错误 - 无法读取未定义的属性“initializeApp”
- python - Python:从文件中读取数字,将它们放在一个列表中并添加它们,如何解决?
- spring-boot - Swagger UI + Spring Boot 中不需要的参数
- python - PyCharm Professional 中 Django 的代码参考不起作用
- java - 如果可以打印大于 2 的值,为什么在 FOR 循环中控制台打印小于 2 的值?