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)) }}setStatus
vs.有setErrors
什么区别?
如果您使用
setErrors,您的错误将被Formik的下一个
validate或
validationSchema调用清除,这些错误可以由用户键入(更改事件)或模糊输入(模糊事件)触发。注意:这是假设您尚未手动设置
validateOnChange和设置
validateOnBlur道具
false(它们是
true默认设置)。
IMHO
setStatus实际上是理想的选择,因为它将错误消息放置在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>) }请注意,的存在或价值对
status阻止下次提交表单没有影响。如果验证失败, Formik仅中止提交过程。



