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.
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.
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
- Clipboard API: kopiere og lime inn i React
- Geolocation API i React-komponenter
- Notifications API og håndtering av tillatelser
- IntersectionObserver for rulleutløste effekter