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.

React-Hook-Form setValue para Material-UI Autocomplete no funciona.

Estoy construyendo un formulario con React-Hook-Form y Material-UI. Cada componente de formulario de Material-UI está envuelto en un componente Controller de react-hook-form.

El usuario tiene la opción de llenar automáticamente el formulario con diferentes conjuntos de valores predefinidos cuando hace clic en un botón. Estoy intentando usar setValue() para lograr eso y parece funcionar bien para la entrada de texto y la selección. Sin embargo, para el autocompletado, el nuevo valor no se visualiza aunque se envía correctamente al enviar el formulario. Además, cuando se muestra un área de texto, el contenido parece mezclarse con la etiqueta.

Aquí tienes un ejemplo completo:

Enlace de CodeSandbox

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para usar setValue() con Autocomplete y Textarea en React-Hook-Form y Material-UI

    Cuando se utiliza setValue() con Autocomplete y Textarea en React-Hook-Form y Material-UI, hay algunas cosas que debes considerar:

    Para Autocomplete

    El atributo value para Autocomplete es diferente de otros componentes de formulario de Material-UI. En cambio, debes establecer el atributo defaultValue para el componente Autocomplete. Esto significa que en tu función setValue(), debes usar el atributo defaultValue en su lugar:

    setValue("fieldName", defaultValue);
    

    Para Textarea

    Al igual que Autocomplete, Textarea requiere que se establezca el atributo defaultValue en lugar del atributo value. Además, para evitar que la etiqueta y el texto de entrada se mezclen, debes especificar el atributo id para el componente Textarea. En tu función setValue(), debes usar tanto el atributo defaultValue como el atributo id:

    setValue("fieldName", defaultValue);
    document.getElementById("fieldName")!.value = defaultValue;
    

    Ten en cuenta que debes usar ! para asegurar que getElementById() no devuelva nulo.

    Aquí tienes una versión actualizada de la función setFormValues() utilizando las soluciones anteriores:

    const setFormValues = (formData: FormData) => {
      Object.keys(formData).forEach((fieldName) => {
        const defaultValue = formData[fieldName];
        setValue(fieldName, defaultValue);
        if (fieldName === "description") {
          document.getElementById("description")!.value = defaultValue;
        }
      });
    };
    

    Con estos cambios, Autocomplete y Textarea deberían funcionar correctamente al establecer valores utilizando setValue() en React-Hook-Form y Material-UI.

Comments are closed.