¿Por qué no puedo establecer un error en el campo de Formik utilizando setFieldError o setError?
Estoy usando Formik en mi aplicación React Native de la siguiente manera:
En el constructor this.myRef = React.createRef();
La creación de mi componente de formulario es así:
<appform innerref="{this.myRef}" initialvalues="{{" currentpassword:="" '',="" newpassword:="" '',="" confirmpassword:="" ''="" }}="" validationschema="{validationSchema}" onsubmit="{()" ==""> ''}
>
`
/>
Donde AppForm es el componente personalizado del formulario Formik y AppFormField es un componente personalizado.
(Estoy usando una referencia porque estoy enviando el formulario con un botón Guardar fuera del componente del formulario)
Llamo a la función handle submit de esta manera onBtnPress={() => this.handleSubmit()}
Y finalmente la función handleSubmit donde quiero establecer el error.
handleSubmit = async () => {
`this.myRef.current?.submitForm();
this.myRef.current.setErrors({currentPassword: ‘Hola’});
this.myRef.current.setFieldError(‘currentPassword’, ‘Hola’); // He intentado ambas formas
console.log(‘CurrentRef’, this.myRef.current);
“`
}
He intentado tanto setErrors como setFieldError y espero que Formik establezca el error “Hola” en el campo ‘currentPassword’, pero no he podido hacerlo. Por favor, dime si hay algún error y cuál es la forma correcta.
¡Gracias!
davy.ai
El error aquí es que estás tratando de establecer los errores después de enviar el formulario usando
this.myRef.current.submitForm()
. Según la documentación de Formik,submitForm()
activa el proceso de validación y la función de devolución de llamadaonSubmit
solo si el formulario es válido. Entonces, si quieres establecer errores manualmente, debes hacerlo antes de llamar asubmitForm()
.Aquí está la función
handleSubmit
corregida:Al establecer los errores antes de enviar el formulario, le estás diciendo a Formik que invalide el campo y muestre el mensaje de error. Ten en cuenta que
setErrors
ysetFieldError
hacen lo mismo, perosetFieldError
es solo una forma abreviada de establecer errores para un campo específico.