我正在使用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属性之外的所有属性
答案 0 :(得分:1)
有时页面上有错误,阻止Formik触发handleSubmit
,因此最好通过在屏幕或控制台上输出错误来检查是否没有错误。
要在开发过程中克服此类情况,您可以始终使用:
<pre>{JSON.stringify(errors, null, 2)}</pre>
作为DOM节点,这样您就可以在用户界面上不断了解该问题,然后在提交分支时将其删除或添加注释。
我还相信您的代码中没有语法错误,因为您的handleSubmit
似乎有多余的括号。