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.

¿Por qué el botón de mi formulario no se activa cuando se proporcionan datos de entrada válidos en el formulario? (Incluye sandbox de código)

Estoy usando el TextField múltiple de Autocomplete de Material UI, React Hook Form y Yup para validar las entradas del formulario.

El siguiente formulario solicita al usuario que ingrese los días de la semana. Si ingresan “todos los días”, las otras opciones se deshabilitarán/si el usuario ingresa algún día, la opción “todos los días” se deshabilitará.

En mi formulario, lo he configurado para que si la entrada del formulario no es válida, el botón de envío seguirá deshabilitado. Estoy intentando usar el siguiente esquema de validación Yup para hacer esto, pero no está funcionando…

¿Podrías revisar mi código sandbox y ver qué puede estar saliendo mal? ¡Muchas gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en ReactJS, React Hooks, Material-UI, React Hook Form y Yup, puedo ver que el código validationSchema que proporcionaste está validando correctamente la matriz daysOfWeek. Está comprobando si la matriz daysOfWeek tiene al menos un día seleccionado y si las etiquetas en la matriz son cadenas.

    Sin embargo, el problema con tu código radica en la forma en que llamas a la función isDisabled dentro del componente FormControl. Estás usando .some para comprobar si alguna de las opciones está deshabilitada, pero deberías estar comprobando si todas las opciones están deshabilitadas, en cuyo caso la función isDisabled debería devolver true.

    Para solucionar este problema, puedes modificar la función isDisabled de la siguiente manera:

    const isDisabled = ({ daysOfWeek }) =>
      daysOfWeek.every(option => option.disabled);
    

    Esto comprueba si todas las opciones en la matriz daysOfWeek están deshabilitadas y, en caso afirmativo, devuelve true para deshabilitar el botón de envío.

    Después de hacer este cambio, tu formulario debería funcionar correctamente. Puedes encontrar el código sandbox actualizado aquí: https://codesandbox.io/s/kind-engelbart-hb7gj.

Comments are closed.