0Pricing
React Academy · Leçon

API Clipboard : copier et coller dans React

Implémentez des boutons de copie dans le presse-papiers avec l’API Clipboard moderne et prévoyez une solution de secours adaptée aux anciens navigateurs

API Clipboard : copier et coller dans React est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Écrire dans le presse-papiers

navigator.clipboard.writeText(text) écrit une chaîne dans le presse-papiers du système et renvoie une promesse. Il s'agit du remplacement moderne de l'ancienne approche execCommand. Attendez toujours la promesse avec await et gérez son éventuel rejet, par exemple lorsque l'utilisateur refuse l'accès au presse-papiers.

Lire le presse-papiers

navigator.clipboard.readText() lit le contenu actuel du presse-papiers sous forme de chaîne et renvoie également une promesse. La lecture nécessite l'autorisation clipboard-read, que le navigateur demande à l'utilisateur d'accorder. En pratique, la lecture du presse-papiers est moins fréquente que l'écriture dans les applications React courantes.

L'écriture dans le presse-papiers nécessite une action de l'utilisateur

Les navigateurs imposent que clipboard.writeText ne puisse être appelé que dans le gestionnaire d'une action de l'utilisateur, par exemple un événement de clic ou d'appui sur une touche. L'appeler dans un useEffect ou de manière asynchrone après l'action déclenchera une erreur de sécurité. Déclenchez toujours l'écriture directement depuis un gestionnaire onClick.

Modèle d'interface pour la copie dans le presse-papiers

Le modèle standard est le suivant : l'utilisateur clique sur un bouton de copie, votre gestionnaire appelle navigator.clipboard.writeText(value), puis, en cas de succès, vous définissez l'état copied sur true ; le bouton affiche temporairement une coche ou le libellé « Copié ! ». Après un court délai, le bouton revient à son état normal.

Créer la fonction useCopyToClipboard

Encapsulez la logique dans une fonction useCopyToClipboard qui renvoie un tuple : [copied, copyFn]. Le booléen copied pilote le retour visuel de l'interface utilisateur, et copyFn accepte le texte à copier. La fonction gère en interne l'écriture asynchrone et les éventuelles erreurs afin que les composants restent simples.

Réinitialiser l'état de copie

Dans la fonction, après une copie réussie, appelez setCopied(true) et programmez une réinitialisation avec setTimeout(() => setCopied(false), 2000). Stockez l'ID du délai d'attente et effacez-le dans le nettoyage d'un useEffect afin d'empêcher les mises à jour d'état après le démontage. Cela évite l'avertissement « impossible de mettre à jour l'état d'un composant démonté ».

Solution de repli ancienne avec execCommand

Les anciens navigateurs et les pages qui n'utilisent pas HTTPS ne prennent pas en charge l'API du presse-papiers. L'ancienne solution de repli crée un textarea temporaire, définit sa valeur, l'ajoute au corps du document, appelle document.execCommand('copy'), puis supprime l'élément. Cette approche est synchrone et fonctionne partout, bien qu'elle soit obsolète.

Détecter la disponibilité de l'API du presse-papiers

Avant d'utiliser l'API du presse-papiers, vérifiez : navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Si elle n'est pas disponible, utilisez l'ancienne approche de repli execCommand. Cette vérification préventive évite les erreurs à l'exécution dans les environnements qui ne prennent pas l'API en charge.

Autorisation de lecture du presse-papiers

La lecture du presse-papiers nécessite l'autorisation de l'utilisateur via l'API des permissions. Vous pouvez interroger l'état actuel : navigator.permissions.query({ name: 'clipboard-read' }) renvoie un PermissionStatus dont l'état est granted, denied ou prompt. Le navigateur demandera automatiquement l'autorisation lorsque vous appellerez readText().

Exigence HTTPS

L'API du presse-papiers est disponible uniquement dans des contextes sécurisés (HTTPS ou localhost). Sur les pages HTTP, navigator.clipboard vaut undefined. Il s'agit d'une restriction de sécurité, car le contenu du presse-papiers peut être sensible. Vérifiez toujours la disponibilité de l'API avant de référencer ses méthodes afin d'éviter les erreurs de référence nulle.

Tester le presse-papiers dans jsdom

jsdom (utilisé par Jest) n’implémente pas l’API du presse-papiers. Simulez-la dans la configuration de vos essais : Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). Cela vous permet de vérifier que votre composant appelle writeText avec l’argument correct, sans environnement de navigateur réel.

Conditions requises pour l’écriture dans le presse-papiers

Quand peut-on appeler navigator.clipboard.writeText() en toute sécurité dans le navigateur ?

Récapitulatif de la leçon : API du presse-papiers

Utilisez navigator.clipboard.writeText() dans un gestionnaire de clic pour copier du texte. Créez un crochet useCopyToClipboard qui renvoie [copied, copyFn] avec une réinitialisation temporisée. Vérifiez toujours la disponibilité de l’API, fournissez une solution de secours utilisant execCommand pour les anciens navigateurs et simulez navigator.clipboard dans les essais Jest.

Questions Fréquemment Posées

La leçon « API Clipboard : copier et coller dans React » est-elle gratuite ?

Oui — le texte complet de « API Clipboard : copier et coller dans React » 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 « API Clipboard : copier et coller dans React » ?

Implémentez des boutons de copie dans le presse-papiers avec l’API Clipboard moderne et prévoyez une solution de secours adaptée aux anciens navigateurs 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 1 sur 4.

Combien de temps prend la leçon « API Clipboard : copier et coller dans React » ?

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. API Clipboard : copier et coller dans React
  2. API de géolocalisation dans les composants React
  3. API de notifications et gestion des autorisations
  4. IntersectionObserver pour les effets déclenchés par le défilement
← Retour à React Academy