Formik 在 onSubmit 上发送了一个重复的值,不知道为什么
Formik is sending a duplicate value on onSubmit, can't figure out why
当我在 onSubmit 上 post 数据并将正在发送的实际数据记录到控制台时,一切看起来都很好,除了有一个额外的 "firstName" 属性值为空字符串的对象。所以我会看到这样的东西:
{
firstName: '',
lastName: 'foo',
email: '1@2.com',
password: 'bar',
firstName: 'baz'
}
下面是相关的代码:
// Signup.jsx
<Formik
initialValues={{
firstname: '',
lastName: '',
email: '',
password: '',
}}
onSubmit={handleSubmit}
validationSchema={validationSchema}
>
{({ dirty, isValid }) => {
return (
<Form className={classes.form}>
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>
<FormikField name="firstName" />
</Grid>
<Grid item xs={12} sm={6}>
<FormikField name="lastName" />
</Grid>
<Grid item xs={12}>
<FormikField name="email" />
</Grid>
<Grid item xs={12}>
<FormikField name="password" />
</Grid>
</Grid>
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
disabled={!dirty || !isValid}
>
Sign Up
</Button>
<Grid container justify="flex-end">
<Grid item>
<Link to="/signin" variant="body2">
Already have an account? Sign in
</Link>
</Grid>
</Grid>
</Form>
);
}}
</Formik>
这是 Formik 字段:
// FormikField.js
const FormikField = ({ name, required, fullWidth, variant }) => {
return (
<div>
<Field
as={TextField}
label={name}
id={name}
name={name}
required={required}
fullWidth={fullWidth}
variant={variant}
autoFocus
helperText={<ErrorMessage name={name} />}
/>
</div>
);
};
无法弄清楚为什么会这样,非常感谢任何帮助!哦,没那么重要,但我也有一个问题,它会立即显示每个表单的验证消息,而不是等待用户先在其中输入内容,然后模糊地查看它是否有效——所以对此有任何帮助也很棒:)
谢谢
我认为这是你的问题:
<Formik
initialValues={{
firstname: '', <-- you have a typo (small n)
lastName: '',
email: '',
password: '',
}}
应该是名字,不是名字
当我在 onSubmit 上 post 数据并将正在发送的实际数据记录到控制台时,一切看起来都很好,除了有一个额外的 "firstName" 属性值为空字符串的对象。所以我会看到这样的东西:
{
firstName: '',
lastName: 'foo',
email: '1@2.com',
password: 'bar',
firstName: 'baz'
}
下面是相关的代码:
// Signup.jsx
<Formik
initialValues={{
firstname: '',
lastName: '',
email: '',
password: '',
}}
onSubmit={handleSubmit}
validationSchema={validationSchema}
>
{({ dirty, isValid }) => {
return (
<Form className={classes.form}>
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>
<FormikField name="firstName" />
</Grid>
<Grid item xs={12} sm={6}>
<FormikField name="lastName" />
</Grid>
<Grid item xs={12}>
<FormikField name="email" />
</Grid>
<Grid item xs={12}>
<FormikField name="password" />
</Grid>
</Grid>
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
disabled={!dirty || !isValid}
>
Sign Up
</Button>
<Grid container justify="flex-end">
<Grid item>
<Link to="/signin" variant="body2">
Already have an account? Sign in
</Link>
</Grid>
</Grid>
</Form>
);
}}
</Formik>
这是 Formik 字段:
// FormikField.js
const FormikField = ({ name, required, fullWidth, variant }) => {
return (
<div>
<Field
as={TextField}
label={name}
id={name}
name={name}
required={required}
fullWidth={fullWidth}
variant={variant}
autoFocus
helperText={<ErrorMessage name={name} />}
/>
</div>
);
};
无法弄清楚为什么会这样,非常感谢任何帮助!哦,没那么重要,但我也有一个问题,它会立即显示每个表单的验证消息,而不是等待用户先在其中输入内容,然后模糊地查看它是否有效——所以对此有任何帮助也很棒:)
谢谢
我认为这是你的问题:
<Formik
initialValues={{
firstname: '', <-- you have a typo (small n)
lastName: '',
email: '',
password: '',
}}
应该是名字,不是名字