React Academy · leksjon

Clipboard API: kopiere og lime inn i React

Implementer knapper for kopiering til utklippstavlen med det moderne Clipboard API-et, og bruk en god reserveløsning i eldre nettlesere.

Leksjon 1 av 413 trinn

Clipboard API: kopiere og lime inn i React er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Skrive til utklippstavlen

navigator.clipboard.writeText(text) skriver en tekststreng til systemets utklippstavle og returnerer et Promise. Det er den moderne erstatningen for den eldre execCommand-metoden. Bruk alltid await på Promiset, og håndter mulig avvisning, for eksempel når brukeren nekter tilgang til utklippstavlen.

Lese fra utklippstavlen

navigator.clipboard.readText() leser det gjeldende innholdet på utklippstavlen som en tekststreng og returnerer også et Promise. Lesing krever tillatelsen clipboard-read, som nettleseren ber brukeren om å gi. I praksis brukes lesing fra utklippstavlen sjeldnere enn skriving i typiske React-applikasjoner.

Skriving til utklippstavlen krever en brukerhandling

Nettlesere håndhever at clipboard.writeText bare kan kalles i en håndterer for en brukerhandling, for eksempel en klikk- eller keydown-hendelse. Hvis du kaller den i en useEffect eller asynkront etter brukerhandlingen, utløses en sikkerhetsfeil. Utløs alltid skrivingen direkte fra en onClick-håndterer.

Mønster for brukergrensesnitt ved kopiering til utklippstavlen

Det vanlige mønsteret er: Brukeren klikker på en kopieringsknapp, håndtereren kaller navigator.clipboard.writeText(value), og ved vellykket kopiering setter du tilstanden copied til true. Knappen viser midlertidig et hakemerke eller teksten "Kopiert!". Etter en kort forsinkelse går knappen tilbake til normaltilstanden.

Bygge useCopyToClipboard-hooken

Kapsle inn logikken i en useCopyToClipboard-hook som returnerer en tuppel: [copied, copyFn]. Boolskverdien copied styrer tilbakemeldingen i brukergrensesnittet, og copyFn tar imot teksten som skal kopieres. Hooken håndterer den asynkrone skrivingen og eventuelle feil internt, slik at komponentene forblir enkle.

Tilbakestille tilstanden for copied

Inne i hooken setter du setCopied(true) etter en vellykket kopiering og planlegger en tilbakestilling med setTimeout(() => setCopied(false), 2000). Lagre tidsavbrudds-ID-en og fjern den i en useEffect-opprydding for å hindre tilstandsoppdateringer etter avmontering. Dette unngår advarselen "kan ikke oppdatere tilstanden på en avmontert komponent".

Eldre reserve med execCommand

Eldre nettlesere og sider som ikke bruker HTTPS, støtter ikke Clipboard API. Den eldre reserveløsningen oppretter et midlertidig textarea, angir verdien, legger det til i body, kaller document.execCommand('copy') og fjerner elementet. Denne metoden er synkron og fungerer overalt, men den er foreldet.

Kontrollere om Clipboard API er tilgjengelig

Før du bruker Clipboard API, kontrollerer du: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Hvis API-et ikke er tilgjengelig, bruker du den eldre execCommand-metoden som reserve. Denne defensive kontrollen hindrer kjøretidsfeil i miljøer som ikke støtter API-et.

Tillatelse til å lese fra utklippstavlen

Lesing fra utklippstavlen krever brukertillatelse via Permissions API. Du kan spørre etter gjeldende status: navigator.permissions.query({ name: 'clipboard-read' }) returnerer en PermissionStatus med en state som er granted, denied eller prompt. Nettleseren ber automatisk om tillatelse når du kaller readText().

Krav om HTTPS

Clipboard API er bare tilgjengelig i sikre kontekster, altså HTTPS eller localhost. På HTTP-sider er navigator.clipboard undefined. Dette er en sikkerhetsbegrensning fordi innholdet på utklippstavlen kan være sensitivt. Kontroller alltid at API-et er tilgjengelig før du refererer til metodene, for å unngå nullreferansefeil.

Testing av Clipboard i jsdom

jsdom (som brukes av Jest) implementerer ikke Clipboard API. Simuler det i testoppsettet: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). Da kan De teste at komponenten kaller writeText med riktig argument uten et ekte nettlesermiljø.

Krav for skriving til Clipboard

Når kan navigator.clipboard.writeText() kalles på en trygg måte i nettleseren?

Oppsummering av leksjonen: Clipboard API i React

Bruk navigator.clipboard.writeText() i en klikkbehandler for å kopiere tekst. Lag en useCopyToClipboard-hook som returnerer [copied, copyFn], med en tidsstyrt tilbakestilling. Sjekk alltid om API-et er tilgjengelig, tilby en execCommand-reserve for eldre nettlesere, og simuler navigator.clipboard i Jest-tester.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Clipboard API: kopiere og lime inn i React» gratis?

Ja – hele teksten i «Clipboard API: kopiere og lime inn i React» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Clipboard API: kopiere og lime inn i React»?

Implementer knapper for kopiering til utklippstavlen med det moderne Clipboard API-et, og bruk en god reserveløsning i eldre nettlesere. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Clipboard API: kopiere og lime inn i React»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Clipboard API: kopiere og lime inn i React
  2. Geolocation API i React-komponenter
  3. Notifications API og håndtering av tillatelser
  4. IntersectionObserver for rulleutløste effekter
← Tilbake til React Academy