【发布时间】:2019-08-09 18:32:46
【问题描述】:
我正在使用 react 和 formik 创建一个表单。下面是我的代码:
<div>
<Formik
initialValues={{
email: ""
}}
onSubmit={(values: FState, setSubmitting: any) => {
console.log("Enter in submit function", values);
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
setSubmitting(false);
}, 500);
}}
validationSchema={validationSchemaGlobal}
>
{({
errors,
touched,
handleBlur,
handleChange,
isSubmitting,
values,
handleSubmit
}: any) => (
<div>
<Cards>
<form onSubmit={handleSubmit}>
<CardBody>
<h4>
Enter Your Email Address and we'll send you a link to reset your
password
</h4>
<Field
type="text"
id="email"
value={values.email}
component={CustomInput}
onChange={handleChange}
onBlur={handleBlur}
/>
{errors.email && touched.email ? (
<div style={{ color: "red" }}>{errors.email}</div>
) : null}
</CardBody>
<CardFooter>
<br />
<button type="submit" disabled={isSubmitting}>
Send Password Reset Link
{/* {isSubmitting && <i className="fa fa-sponner fa-spin"/>} */}
</button>
</CardFooter>
</form>
</Cards>
</div>
)}
</Formik>
</div>
在这个 formik 表单中,onSubmit 函数不起作用。我不知道为什么?请告诉我,我的代码有什么问题?
【问题讨论】:
-
你的意思是它坏了,还是根本没有调用
onSubmit方法?我认为您应该调用onSubmit方法的第二个参数actions,并使用actions.setSubmitting而不仅仅是setSubmitting,因为它是一个传递给它的对象,而不是一个函数。 -
@Tholle onSubmit 不起作用。我已经完成了 actions.setSubmitting 但没有起作用。
-
我试图运行你的代码,并且你没有提供的位被剥离它确实有效:codesandbox.io/s/formik-example-3kdov?fontsize=14 所以我删除了:
component={CustomInput}并将所有其他自定义组件更改为 div ,并更改了您没有提供的验证模式。也许问题出在您的 CustomInput 或验证中? -
删除验证模式并检查,我的意思是validationSchema: null。
-
我遇到了类似的问题,删除验证模式帮助我解决了这个问题。我想我需要检查我是否有任何未评估的字段。
标签: reactjs typescript formik