Formik作者在这里…
setError
在v0.8.0中已弃用,并重命名为setStatus
。您可以使用setErrors(errors)
或setStatus(whateverYouWant)
在handleSubmit
函数中获得所需的行为,如下所示:
handleSubmit = async (values, { setErrors, resetForm }) => {
try {
// attempt API call
} catch(e) {
setErrors(transformMyApiErrors(e))
// or setStatus(transformMyApiErrors(e))
}
}
如果您使用setErrors
,您的错误将被Formik的下一个validate
或validationSchema
调用清除,这些错误可以由用户键入(更改事件)或模糊输入(模糊事件)触发。注意:这是假设您尚未手动设置validateOnChange
和设置validateOnBlur
道具false
(它们是true
默认设置)。
IMHOsetStatus
实际上是理想的选择,因为它将错误消息放置在Formik状态的单独部分中。然后,您可以像这样决定如何/何时向最终用户显示此消息。
// status can be whatever you want
{!!status && <FormError>{status}</FormError>}
// or mix it up, maybe transform status to mimic errors shape and then ...
{touched.email && (!!errors.email && <FormError>{errors.email}</FormError>) || (!!status && <FormError>{status.email}</FormError>) }