0Pricing
React Academy · Lección

Inputs no controlados con useRef

Acceda a los valores de inputs del DOM mediante refs en lugar de state para formularios sencillos.

Inputs no controlados con useRef es una lección gratuita de React Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Bienvenida

En esta lección utilizará entradas no controladas con useRef para acceder a los valores de entradas del DOM sin gestionarlos en el estado de React.

Controladas frente a no controladas

Una **entrada controlada** obtiene su valor del estado de React (value + onChange). Una **entrada no controlada** gestiona su propio valor en el DOM; React lo lee mediante una referencia solo cuando es necesario.
// Controlled
<input value={name} onChange={e => setName(e.target.value)} />

// Uncontrolled
const nameRef = useRef();
<input ref={nameRef} defaultValue="" />

Leer el valor al enviar el formulario

Con entradas no controladas, lea el valor cuando el usuario envíe el formulario accediendo a `ref.current.value`. No se actualiza el estado mientras el usuario escribe.
function Form() {
  const nameRef = useRef();
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(nameRef.current.value);
  };
  return (
    <form onSubmit={handleSubmit}>
      <input ref={nameRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

defaultValue frente a value

Para las entradas no controladas, use `defaultValue` (no `value`) para establecer el valor inicial. Establecer `value` sin `onChange` hace que React muestre una advertencia y la entrada se vuelva de solo lectura.
<input ref={nameRef} defaultValue="Initial text" />

Cuándo usar entradas no controladas

Las entradas no controladas son útiles para: formularios sencillos en los que solo necesita los valores al enviarlos, entradas de archivo (que React no puede controlar) y entradas críticas para el rendimiento en las que es importante evitar nuevos renderizados.

Restablecer una entrada no controlada

Para restablecer una entrada no controlada, establezca `ref.current.value = ''` de forma imperativa. También puede cambiar la prop `key` del componente para obligar a React a volver a montarlo con un nodo DOM nuevo.
// Reset imperatively
nameRef.current.value = '';

// Or remount
setFormKey(k => k + 1);
<input key={formKey} ref={nameRef} />

Varias referencias para varias entradas

En formularios con varios campos no controlados, cree una referencia independiente para cada entrada. Acceda a `.current.value` de cada referencia al enviar el formulario.
const emailRef = useRef();
const passwordRef = useRef();

<input ref={emailRef} type="email" />
<input ref={passwordRef} type="password" />

Enfocar al montarse

useRef se utiliza a menudo para enfocar automáticamente una entrada cuando se monta un componente. Lea la referencia dentro de useEffect después del montaje.
const inputRef = useRef();
useEffect(() => {
  inputRef.current?.focus();
}, []);
<input ref={inputRef} />

Entradas no controladas y validación

Validar entradas no controladas requiere leer sus valores de forma imperativa al enviar el formulario. Esto es más engorroso que usar entradas controladas para la validación en tiempo real. Prefiera entradas controladas cuando necesite comentarios inmediatos.

La compensación de useRef

Las entradas no controladas evitan nuevos renderizados, pero renuncian a la reactividad de React. No puede renderizar condicionalmente según el valor de la entrada en tiempo real sin leer la referencia y actualizar el estado manualmente.

Comprobación rápida

¿Qué prop debería utilizar para establecer un valor inicial en una entrada no controlada de React?

Resumen

Las entradas no controladas utilizan referencias para leer valores cuando se necesitan. Use defaultValue para establecer los valores iniciales, lea ref.current.value al enviar el formulario y restablezca la entrada borrando el valor de la referencia o cambiando key.

A continuación

Siguiente lección: **Entrada de archivo y lectura de datos de archivos** — gestionará entradas de archivo y leerá metadatos y datos de imágenes con FileReader.

Preguntas frecuentes

¿La lección «Inputs no controlados con useRef» es gratis?

Sí — el texto completo de «Inputs no controlados con useRef» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Inputs no controlados con useRef»?

Acceda a los valores de inputs del DOM mediante refs en lugar de state para formularios sencillos. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Inputs no controlados con useRef»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Inputs no controlados con useRef
  2. Input de archivo y lectura de datos
  3. Interfaz de carga de archivos mediante arrastrar y soltar
  4. Subir archivos a una API de backend
← Volver a React Academy