使用 Formik 未成功触发 handleSubmit 函数
handleSubmit function not successfully firing using Formik
我正在使用 Formik + Yup 构建一个表单,但似乎无法通过一个基本问题,我觉得我遗漏了一些明显的东西。我的 handleSubmit 函数不会在按钮单击时触发 - 即使是像控制台日志这样简单的东西。如果我向它触发的 onClick 按钮处理程序添加一个纯函数,但 Formik 似乎没有传递我用 withFormik HOC 构造的 handleSubmit。
我试过将处理程序添加到 Form 组件,但也不起作用。
const formikEnhancer = withFormik({
mapPropsToValues: props => ({
firstName: props.firstName || '',
...
}),
validationSchema: yup.object().shape({
firstName: yup.string().required('Please enter your first name'),
...
}),
handleSubmit: (values, formikBag) => {
console.log('test');
}
},
});
const BusinessFundingForm = ({
values,
isSubmitting,
errors,
handleBlur,
handleChange,
handleSubmit,
touched,
data,
}) => {
return (
<Form className="form" id="form-id">
<Row>
<Col xs={12} sm={6}>
<InputField
id="first-name"
type="text"
name="firstName"
value={values.firstName}
onChange={handleChange}
onBlur={handleBlur}
placeholder="First Name"
label="First Name"
/>
{errors.firstName &&
touched.firstName && <Error>{errors.firstName}</Error>}
</Col>
...
</Row>
<Row>
<ButtonWrapper>
<Button
type="submit"
tall
onClick={handleSubmit}
varianttype={
isSubmitting ||
(!!errors.firstName ||
formHelpers.isEmpty(values.firstName))
? 'disabled'
: 'outline'
}
disabled={
isSubmitting ||
(!!errors.firstName ||
formHelpers.isEmpty(values.firstName))
}
text="Submit →"
/>
</ButtonWrapper>
</Row>
</Form>
</FormGrid>
</Element>
);
};
export default formikEnhancer(BusinessFundingForm);
为了简洁起见,我删除了除 firstName 之外的所有属性 属性
有时页面上的错误会阻止 Formik 触发 handleSubmit
因此最好通过在屏幕或控制台上输出错误来检查是否没有错误。
要在开发过程中克服这些类型的场景,您始终可以使用:
<pre>{JSON.stringify(errors, null, 2)}</pre>
作为 DOM 节点,以便您始终了解 UI 上的问题,然后在提交到您的分支期间将其删除或评论。
此外,我相信您的代码没有语法错误,因为您的 handleSubmit
似乎有额外的右大括号。
我正在使用 Formik + Yup 构建一个表单,但似乎无法通过一个基本问题,我觉得我遗漏了一些明显的东西。我的 handleSubmit 函数不会在按钮单击时触发 - 即使是像控制台日志这样简单的东西。如果我向它触发的 onClick 按钮处理程序添加一个纯函数,但 Formik 似乎没有传递我用 withFormik HOC 构造的 handleSubmit。
我试过将处理程序添加到 Form 组件,但也不起作用。
const formikEnhancer = withFormik({
mapPropsToValues: props => ({
firstName: props.firstName || '',
...
}),
validationSchema: yup.object().shape({
firstName: yup.string().required('Please enter your first name'),
...
}),
handleSubmit: (values, formikBag) => {
console.log('test');
}
},
});
const BusinessFundingForm = ({
values,
isSubmitting,
errors,
handleBlur,
handleChange,
handleSubmit,
touched,
data,
}) => {
return (
<Form className="form" id="form-id">
<Row>
<Col xs={12} sm={6}>
<InputField
id="first-name"
type="text"
name="firstName"
value={values.firstName}
onChange={handleChange}
onBlur={handleBlur}
placeholder="First Name"
label="First Name"
/>
{errors.firstName &&
touched.firstName && <Error>{errors.firstName}</Error>}
</Col>
...
</Row>
<Row>
<ButtonWrapper>
<Button
type="submit"
tall
onClick={handleSubmit}
varianttype={
isSubmitting ||
(!!errors.firstName ||
formHelpers.isEmpty(values.firstName))
? 'disabled'
: 'outline'
}
disabled={
isSubmitting ||
(!!errors.firstName ||
formHelpers.isEmpty(values.firstName))
}
text="Submit →"
/>
</ButtonWrapper>
</Row>
</Form>
</FormGrid>
</Element>
);
};
export default formikEnhancer(BusinessFundingForm);
为了简洁起见,我删除了除 firstName 之外的所有属性 属性
有时页面上的错误会阻止 Formik 触发 handleSubmit
因此最好通过在屏幕或控制台上输出错误来检查是否没有错误。
要在开发过程中克服这些类型的场景,您始终可以使用:
<pre>{JSON.stringify(errors, null, 2)}</pre>
作为 DOM 节点,以便您始终了解 UI 上的问题,然后在提交到您的分支期间将其删除或评论。
此外,我相信您的代码没有语法错误,因为您的 handleSubmit
似乎有额外的右大括号。