es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo manejar el error.tocado y errores con un objeto en Formik

Tengo un objeto que integro en un formulario con Formik.

   const obj = {
   address: {
     line1: 'Calle1',
     line2: 'Calle2',
     line3: 'Calle3'
  }

Cuando creo el formik.group, me enfrento a un problema con el control de valor.

    <form.control value="{formikProps.values.address.line2}" onchange="{formikProps.handleChange}" onblur="{formikProps.handleBlur}" type="text" name="address.line2" aria-label="dirección linea 2" isinvalid="{" !!formikprops.touched.address.line2="" &&="" !!formikprops.errors.address.line2="" }=""></form.control>

Si agrego “isInvalid”, obtengo un error:

TS2339: Property 'line2' does not exist on type 'boolean | FormikTouched<any> | FormikTouched<any>[]'.

La propiedad ‘line2’ no existe en el tipo ‘false’.

Si quito “isInvalid”, no hay problema para modificar el campo de texto.

¿Cómo integrar un objeto en el control “isInvalid”? ¿Si tienes alguna idea?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para integrar el objeto en el control isInvalid, debes asegurarte de que todos los niveles del objeto estén definidos en los objetos touched y errors de Formik.

    Por ejemplo, en este caso, para verificar si line2 del objeto address está marcado como tocado y tiene un error, se debe definir lo siguiente en los objetos touched y errors de Formik:

    const formik = useFormik({
      initialValues: {
        address: {
          line1: 'Calle1',
          line2: 'Calle2',
          line3: 'Calle3'
        }
      },
      validationSchema: validationSchema, // asumiendo que se ha definido un esquema de validación
    });
    
    ...
    
    const { touched, errors } = formik;
    
    const touched = {
      address: {
        line1: false,
        line2: false, // definir line2 como marcado
        line3: false
      }
    };
    
    const errors = {
      address: {
        line1: '',
        line2: 'La línea 2 es requerida', // definir el error de la línea 2 si lo hay
        line3: ''
      }
    };
    

    Luego, en el control isInvalid, puedes verificar si address está marcado como tocado y tiene un error, y también si line2 está definido en los objetos touched y errors:

    isInvalid={
      touched.address && touched.address.line2 && errors.address && errors.address.line2
    }
    

    Esto debería ayudarte a integrar el objeto en el control isInvalid en Formik.

Comments are closed.