0Pricing
React Academy · Lezione

Clipboard API: copiare e incollare in React

Implementare pulsanti per copiare negli appunti usando la moderna Clipboard API, con un fallback efficace per i browser meno recenti

Clipboard API: copiare e incollare in React è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Scrivere negli appunti

navigator.clipboard.writeText(text) scrive una stringa negli appunti di sistema e restituisce una Promise. È il sostituto moderno dell'approccio legacy con execCommand. Utilizzate sempre await sulla Promise e gestite un eventuale rifiuto, ad esempio quando l'utente nega l'accesso agli appunti.

Leggere dagli appunti

navigator.clipboard.readText() legge il contenuto corrente degli appunti come stringa e restituisce anch'esso una Promise. La lettura richiede l'autorizzazione clipboard-read, che il browser chiede all'utente di concedere. Nelle applicazioni React tipiche, la lettura degli appunti viene usata meno spesso della scrittura.

La scrittura negli appunti richiede un gesto dell'utente

I browser impongono che clipboard.writeText venga chiamato solo all'interno di un gestore di un gesto dell'utente, ad esempio un evento click o keydown. Chiamarlo dentro un useEffect o in modo asincrono dopo il gesto genererà un errore di sicurezza. Attivate sempre la scrittura direttamente da un gestore onClick.

Schema dell'interfaccia per copiare negli appunti

Lo schema standard è il seguente: l'utente fa clic su un pulsante di copia, il gestore chiama navigator.clipboard.writeText(value), in caso di successo impostate lo stato copied su true e il pulsante mostra temporaneamente un segno di spunta o l'etichetta "Copiato!". Dopo un breve intervallo, il pulsante torna allo stato normale.

Creare l'hook useCopyToClipboard

Incapsulate la logica in un hook useCopyToClipboard che restituisca una tupla: [copied, copyFn]. Il booleano copied controlla il feedback dell'interfaccia, mentre copyFn accetta il testo da copiare. L'hook gestisce internamente la scrittura asincrona e gli eventuali errori, mantenendo semplici i componenti.

Reimpostare lo stato copied

All'interno dell'hook, dopo una copia riuscita impostate setCopied(true) e programmate il ripristino con setTimeout(() => setCopied(false), 2000). Memorizzate l'ID del timeout e cancellatelo nella funzione di cleanup di un useEffect per evitare aggiornamenti dello stato dopo lo smontaggio. In questo modo eviterete l'avviso "impossibile aggiornare lo stato su un componente non montato".

Fallback legacy con execCommand

I browser meno recenti e le pagine non HTTPS non supportano la Clipboard API. Il fallback legacy crea un textarea temporaneo, ne imposta il valore, lo aggiunge al body, chiama document.execCommand('copy') e rimuove l'elemento. Questo approccio è sincrono e funziona ovunque, anche se è deprecato.

Rilevare la disponibilità della Clipboard API

Prima di utilizzare la Clipboard API, controllate: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Se non è disponibile, usate l'approccio legacy con execCommand. Questo controllo difensivo previene gli errori di runtime negli ambienti in cui l'API non è supportata.

Autorizzazione alla lettura degli appunti

La lettura degli appunti richiede l'autorizzazione tramite la Permissions API. Potete interrogare lo stato corrente: navigator.permissions.query({ name: 'clipboard-read' }) restituisce un PermissionStatus con uno state tra granted, denied o prompt. Il browser mostrerà automaticamente la richiesta quando chiamerete readText().

Requisito HTTPS

La Clipboard API è disponibile solo nei contesti sicuri, ovvero HTTPS o localhost. Nelle pagine HTTP, navigator.clipboard è undefined. Si tratta di una limitazione di sicurezza, perché il contenuto degli appunti può essere sensibile. Controllate sempre la disponibilità dell'API prima di accedere ai suoi metodi, per evitare errori di riferimento nullo.

Testare la clipboard in jsdom

jsdom (utilizzato da Jest) non implementa la Clipboard API. Esegua il mock nella configurazione dei test: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). In questo modo può verificare che il componente chiami writeText con l'argomento corretto senza un ambiente browser reale.

Requisiti per la scrittura nella clipboard

Quando è possibile chiamare in sicurezza navigator.clipboard.writeText() nel browser?

Riepilogo della lezione: Clipboard API in React

Utilizzi navigator.clipboard.writeText() all'interno di un gestore di clic per copiare il testo. Crei un hook useCopyToClipboard che restituisca [copied, copyFn] con un ripristino temporizzato. Verifichi sempre la disponibilità dell'API, fornisca un fallback con execCommand per i browser meno recenti e crei un mock di navigator.clipboard nei test Jest.

Domande Frequenti

La lezione «Clipboard API: copiare e incollare in React» è gratuita?

Sì — il testo completo di «Clipboard API: copiare e incollare in React» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «Clipboard API: copiare e incollare in React»?

Implementare pulsanti per copiare negli appunti usando la moderna Clipboard API, con un fallback efficace per i browser meno recenti Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Clipboard API: copiare e incollare in React»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Clipboard API: copiare e incollare in React
  2. Geolocation API nei componenti React
  3. Notifications API e gestione dei permessi
  4. IntersectionObserver per effetti attivati dallo scorrimento
← Torna a React Academy