在调用验证之前给 Formik 初始错误值
Give Formik Initial Error Values, Before Validation is Called
我有以下表格:
const MyForm = () => {
return (
<>
<Formik
validateOnChange={true}
initialValues={{ plan: "", email: "", name: "" }}
validate={values => {
console.log(values)
const errors = {}
if (values.plan !== "123" && values.plan !== "456") {
errors.plan = "Not valid"
} else if (values.plan === "") {
errors.plan = "Please enter something"
}
if (!values.email) {
errors.email = "Please provide an e-mail address."
} else if (
!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
) {
errors.email = "Please provide a valid e-mail address."
}
return errors
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
setSubmitting(false)
}, 400)
}}
>
{({ isSubmitting, errors }) => (
<Form>
<FieldWrapper>
<InputField type="text" name="plan" label="plan" />
<StyledErrorMessage name="plan" component="div" />
</FieldWrapper>
<Button
disabled={errors.plan}
>
Continue
</Button>
</Form>
)}
</Formik>
</>
)
}
我有一个 Continue
按钮,我希望它在出现任何错误时被禁用。我正在做 <Button disabled={errors.plan}>
并且这有效。
但是:它不会禁用按钮 当用户根本不触摸该字段时 - 从那时起,不会调用验证,因此,不会' 是错误对象中的任何错误。所以最初,按钮没有被禁用。
我该如何避免这种情况?
我对 Formik 不是很熟悉,但是您能为表单的完成状态添加一个状态吗,该状态最初设置为 false
,完成后设置为 setState(true)
。那么 <Button>
的条件可以同时检查 errors.plan && completedState
.
我有以下表格:
const MyForm = () => {
return (
<>
<Formik
validateOnChange={true}
initialValues={{ plan: "", email: "", name: "" }}
validate={values => {
console.log(values)
const errors = {}
if (values.plan !== "123" && values.plan !== "456") {
errors.plan = "Not valid"
} else if (values.plan === "") {
errors.plan = "Please enter something"
}
if (!values.email) {
errors.email = "Please provide an e-mail address."
} else if (
!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
) {
errors.email = "Please provide a valid e-mail address."
}
return errors
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
setSubmitting(false)
}, 400)
}}
>
{({ isSubmitting, errors }) => (
<Form>
<FieldWrapper>
<InputField type="text" name="plan" label="plan" />
<StyledErrorMessage name="plan" component="div" />
</FieldWrapper>
<Button
disabled={errors.plan}
>
Continue
</Button>
</Form>
)}
</Formik>
</>
)
}
我有一个 Continue
按钮,我希望它在出现任何错误时被禁用。我正在做 <Button disabled={errors.plan}>
并且这有效。
但是:它不会禁用按钮 当用户根本不触摸该字段时 - 从那时起,不会调用验证,因此,不会' 是错误对象中的任何错误。所以最初,按钮没有被禁用。
我该如何避免这种情况?
我对 Formik 不是很熟悉,但是您能为表单的完成状态添加一个状态吗,该状态最初设置为 false
,完成后设置为 setState(true)
。那么 <Button>
的条件可以同时检查 errors.plan && completedState
.