0Pricing
React Academy · Leçon

Interface de téléversement par glisser-déposer

Créer une zone de glisser-déposer avec les événements onDragOver/onDrop et un retour visuel.

Interface de téléversement par glisser-déposer est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Bienvenue

Dans cette leçon, vous allez créer une zone de téléversement de fichiers par glisser-déposer dans React, en utilisant les événements natifs de glissement et un retour visuel pour guider les utilisateurs.

Présentation des événements de glissement

Le navigateur déclenche des événements de glissement lorsque des fichiers sont déplacés au-dessus d’éléments. Les principaux événements sont : `dragover` (le fichier se trouve au-dessus de l’élément), `dragleave` (le fichier quitte l’élément) et `drop` (le fichier est déposé).

Empêcher le comportement par défaut

Par défaut, déposer un fichier dans le navigateur ouvre ce fichier. Appelez `e.preventDefault()` dans `onDragOver` et `onDrop` pour empêcher ce comportement.
const handleDragOver = (e) => {
  e.preventDefault();
};
const handleDrop = (e) => {
  e.preventDefault();
  const files = Array.from(e.dataTransfer.files);
  // process files
};

État visuel actif

Suivez, à l’aide d’un état booléen, si un fichier est déplacé au-dessus de la zone. Activez ou désactivez une classe CSS pour fournir un retour visuel aux utilisateurs, par exemple une bordure mise en évidence.
const [isDragging, setIsDragging] = useState(false);

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

Lire les fichiers déposés

Les fichiers déposés se trouvent dans `e.dataTransfer.files` — une FileList. Convertissez-la en tableau, puis traitez les fichiers.
const handleDrop = (e) => {
  e.preventDefault();
  setIsDragging(false);
  const files = Array.from(e.dataTransfer.files);
  setSelectedFiles(files);
};

Combiner avec la sélection par clic

Rendez également la zone de dépôt cliquable en affichant un champ de fichier masqué et en déclenchant son clic par programmation lorsque la zone est sélectionnée.
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))}
/>

Afficher des aperçus de fichiers

Parcourez les fichiers sélectionnés pour afficher leur nom et leur taille. Pour les fichiers image, générez des URL d’aperçu avec URL.createObjectURL et révoquez-les dans un effet de nettoyage.

Supprimer des fichiers avant le téléversement

Permettez aux utilisateurs de supprimer des fichiers avant le téléversement en filtrant le tableau des fichiers sélectionnés. Mettez à jour l’état avec le tableau filtré.
const removeFile = (index) =>
  setSelectedFiles(files => files.filter((_, i) => i !== index));

dragenter et dragover

Utilisez `dragenter` pour détecter le premier moment où le déplacement entre dans la zone, et `dragover` pour maintenir l’état actif pendant le survol. Utilisez un compteur pour les éléments enfants imbriqués : incrémentez-le lors de `dragenter`, décrémentez-le lors de `dragleave` et réinitialisez-le lors de `drop`.

Bibliothèques tierces

Pour les zones de dépôt destinées à la production, envisagez **react-dropzone** : cette bibliothèque gère d’emblée les particularités des navigateurs, les attributs ARIA, le filtrage des types de fichiers et plusieurs modes de téléversement.
import { useDropzone } from 'react-dropzone';
const { getRootProps, getInputProps, isDragActive } = useDropzone({
  onDrop: acceptedFiles => setFiles(acceptedFiles),
  accept: { 'image/*': [] },
});

Vérification rapide

Pourquoi devez-vous appeler e.preventDefault() dans le gestionnaire onDragOver ?

Récapitulatif

Créez une zone de dépôt avec les événements onDragOver, onDragLeave et onDrop. Appelez toujours e.preventDefault() lors du glissement et du dépôt. Suivez l’état isDragging pour fournir un retour visuel. Combinez cette zone avec un champ de fichier masqué pour permettre la sélection par clic.

Suite du cours

Leçon suivante : **Téléverser des fichiers vers une API principale** — vous utiliserez FormData et fetch pour envoyer des fichiers avec POST et suivre la progression du téléversement.

Questions Fréquemment Posées

La leçon « Interface de téléversement par glisser-déposer » est-elle gratuite ?

Oui — le texte complet de « Interface de téléversement par glisser-déposer » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Interface de téléversement par glisser-déposer » ?

Créer une zone de glisser-déposer avec les événements onDragOver/onDrop et un retour visuel. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Interface de téléversement par glisser-déposer » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Entrées non contrôlées avec useRef
  2. Entrée de fichier et lecture des données
  3. Interface de téléversement par glisser-déposer
  4. Téléverser des fichiers vers une API principale
← Retour à React Academy