React+Material UI+Formik环境下Submit按钮无法触发onSubmit函数的问题求助
React+Material UI+Formik环境下Submit按钮无法触发onSubmit函数的问题求助
我现在在做一个注册表单,用了React、Material UI和Formik来处理表单验证和提交逻辑。但遇到个头疼的问题——点击Register按钮时,Formik的onSubmit完全没触发,一点反应都没有。我试过给按钮加显式的onClick,但也只能触发事件,拿不到表单值。
我已经定义了初始值,用的是受控输入,下面是我的完整代码,麻烦大家帮我看看哪里出问题了?
const Register = () => { const { palette } = useTheme(); const dispatch = useDispatch(); const navigate = useNavigate(); const isNonMobile = useMediaQuery("(min-width:600px)"); const register = async (values, onSubmitProps) => { // this allows us to send form info with image const formData = new FormData(); for (let value in values) { formData.append(value, values[value]); } formData.append("picturePath", values.picture.name); const savedUserResponse = await fetch( "http://localhost:3001/auth/register", { method: "POST", body: formData, } ); const savedUser = await savedUserResponse.json(); console.log("saved User : ", savedUser); onSubmitProps.resetForm(); navigate("/"); }; const handleFormSubmit = async (values, onSubmitProps) => { console.log("Register handler: ", values); return await register(values, onSubmitProps); }; return ( <Formik onSubmit={handleFormSubmit} initialValues={initialValuesRegister} validationSchema={registerSchema} > {({ values, errors, touched, handleBlur, handleChange, handleSubmit, setFieldValue, resetForm, }) => ( <form onSubmit={handleSubmit}> <Box display="grid" gap="30px" gridTemplateColumns="repeat(4, minmax(0, 1fr))" sx={{ "& > div": { gridColumn: isNonMobile ? undefined : "span 4" }, }} > <TextField label="Email" onBlur={handleBlur} onChange={handleChange} value={values.email} name="email" error={Boolean(touched.email) && Boolean(errors.email)} helperText={touched.email && errors.email} sx={{ gridColumn: "span 4" }} /> <TextField label="Password" type="password" onBlur={handleBlur} onChange={handleChange} value={values.password} name="password" error={Boolean(touched.password) && Boolean(errors.password)} helperText={touched.password && errors.password} sx={{ gridColumn: "span 4" }} /> </Box> {/* BUTTONS */} <Box> <Button fullWidth type="submit" sx={{ m: "2rem 0", p: "1rem", backgroundColor: palette.primary.main, color: palette.background.alt, "&:hover": { color: palette.primary.main }, }} > REGISTER </Button> <Typography sx={{ textDecoration: "underline", color: palette.primary.main, "&:hover": { cursor: "pointer", color: palette.primary.light, }, }} ><Link href="/"> Already have an account? Login here. </Link> </Typography> </Box> </form> )} </Formik> ); }; export default Register;
备注:内容来源于stack exchange,提问作者Haider Abbas Abidi
相关产品推荐
相关产品推荐

