0Pricing
React Academy · Lección

Interfaz de carga de archivos mediante arrastrar y soltar

Cree una zona de arrastrar y soltar con eventos onDragOver/onDrop e indicadores visuales.

Interfaz de carga de archivos mediante arrastrar y soltar es una lección gratuita de React Academy en CoddyKit. Esta es la lección 3 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 creará una zona de carga de archivos mediante arrastrar y soltar en React, utilizando eventos nativos de arrastre e indicaciones visuales para orientar a los usuarios.

Descripción general de los eventos de arrastre

El navegador dispara eventos de arrastre cuando se arrastran archivos sobre los elementos. Los eventos principales son: `dragover` (el archivo está sobre el elemento), `dragleave` (el archivo abandona el elemento) y `drop` (se suelta el archivo).

Cómo evitar el comportamiento predeterminado

De forma predeterminada, soltar un archivo en el navegador hace que este navegue hasta el archivo. Llame a `e.preventDefault()` tanto en `onDragOver` como en `onDrop` para evitarlo.
const handleDragOver = (e) => {
  e.preventDefault();
};
const handleDrop = (e) => {
  e.preventDefault();
  const files = Array.from(e.dataTransfer.files);
  // process files
};

Estado visual activo

Realice un seguimiento mediante un estado booleano de si se está arrastrando un archivo sobre la zona. Alterne una clase CSS para proporcionar indicaciones visuales a los usuarios, como un borde resaltado.
const [isDragging, setIsDragging] = useState(false);

<div
  className={isDragging ? 'zone active' : 'zone'}
  onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }}
  onDragLeave={() => setIsDragging(false)}
  onDrop={handleDrop}
>

Lectura de los archivos soltados

Los archivos soltados se encuentran en `e.dataTransfer.files`, una FileList. Conviértala en un arreglo y procese los archivos.
const handleDrop = (e) => {
  e.preventDefault();
  setIsDragging(false);
  const files = Array.from(e.dataTransfer.files);
  setSelectedFiles(files);
};

Combinación con la exploración mediante clic

Haga que la zona de arrastre también sea interactiva al hacer clic: renderice un campo de entrada de archivos oculto y haga clic en él mediante programación cuando se haga clic en la zona.
const inputRef = useRef();

<div onClick={() => inputRef.current.click()} ...>
  Drop files here or click to browse
</div>
<input
  ref={inputRef}
  type="file"
  multiple
  hidden
  onChange={(e) => setSelectedFiles(Array.from(e.target.files))}
/>

Visualización de vistas previas de archivos

Recorra los archivos seleccionados para mostrar sus nombres y tamaños. En el caso de archivos de imagen, genere URL de vista previa con URL.createObjectURL y revóquelas en un efecto de limpieza.

Eliminación de archivos antes de la carga

Permita que los usuarios eliminen archivos antes de cargarlos filtrando el arreglo de archivos seleccionados. Actualice el estado con el arreglo filtrado.
const removeFile = (index) =>
  setSelectedFiles(files => files.filter((_, i) => i !== index));

dragenter frente a dragover

Use `dragenter` para detectar cuándo el arrastre entra por primera vez en la zona y `dragover` para mantener activo el estado mientras el cursor permanece sobre ella. Use un contador para los elementos secundarios anidados: increméntelo en `dragenter`, redúzcalo en `dragleave` y restablézcalo en `drop`.

Bibliotecas de terceros

Para zonas de arrastre destinadas a producción, considere **react-dropzone**: gestiona las particularidades de los navegadores, los atributos ARIA, el filtrado por tipo de archivo y varios modos de carga desde el primer momento.
import { useDropzone } from 'react-dropzone';
const { getRootProps, getInputProps, isDragActive } = useDropzone({
  onDrop: acceptedFiles => setFiles(acceptedFiles),
  accept: { 'image/*': [] },
});

Comprobación rápida

¿Por qué debe llamar a e.preventDefault() en el controlador onDragOver?

Resumen

Cree una zona de arrastre con los eventos onDragOver, onDragLeave y onDrop. Llame siempre a e.preventDefault() en dragover y drop. Realice un seguimiento del estado isDragging para proporcionar indicaciones visuales. Combine la zona con un campo de entrada de archivos oculto para permitir la exploración mediante clic.

Próxima lección

Próxima lección: **Carga de archivos en una API de backend**; utilizará FormData y fetch para enviar archivos mediante POST y realizar un seguimiento del progreso de carga.

Preguntas frecuentes

¿La lección «Interfaz de carga de archivos mediante arrastrar y soltar» es gratis?

Sí — el texto completo de «Interfaz de carga de archivos mediante arrastrar y soltar» 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 «Interfaz de carga de archivos mediante arrastrar y soltar»?

Cree una zona de arrastrar y soltar con eventos onDragOver/onDrop e indicadores visuales. 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 3 de 4.

¿Cuánto tiempo toma la lección «Interfaz de carga de archivos mediante arrastrar y soltar»?

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