Clipboard API: Kopiér og indsæt i React
Implementér knapper til kopiering til udklipsholderen med den moderne Clipboard API, og tilbyd en problemfri fallback til ældre browsere.
Clipboard API: Kopiér og indsæt i React er en gratis React Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Skrivning til udklipsholderen
navigator.clipboard.writeText(text) skriver en streng til systemets udklipsholder og returnerer et Promise. Det er den moderne erstatning for den ældre tilgang med execCommand. Afvent altid Promiset med await, og håndter en mulig afvisning, f.eks. når brugeren afviser adgang til udklipsholderen.
Læsning fra udklipsholderen
navigator.clipboard.readText() læser det aktuelle indhold af udklipsholderen som en streng og returnerer også et Promise. Læsning kræver tilladelsen clipboard-read, som browseren beder brugeren om at give. I praksis bruges læsning fra udklipsholderen sjældnere end skrivning i typiske React-applikationer.
Skrivning til udklipsholderen kræver en brugerhandling
Browsere håndhæver, at clipboard.writeText kun kan kaldes i en handler for en brugerhandling, f.eks. en klik- eller keydown-hændelse. Hvis du kalder den i en useEffect eller asynkront efter brugerhandlingen, udløses en sikkerhedsfejl. Udløs altid skrivningen direkte fra en onClick-handler.
Mønster for brugerflade til kopiering til udklipsholderen
Det almindelige mønster er: Brugeren klikker på en kopieringsknap, din håndteringsfunktion kalder navigator.clipboard.writeText(value), ved succes sætter du tilstanden copied til true, og knappen viser midlertidigt et flueben eller etiketten "Kopieret!". Efter en kort forsinkelse vender knappen tilbage til sin normale tilstand.
Oprettelse af useCopyToClipboard-hooket
Indkapsl logikken i et useCopyToClipboard-hook, der returnerer en tupel: [copied, copyFn]. Den boolske værdi copied styrer tilbagemeldingen i brugerfladen, og copyFn modtager den tekst, der skal kopieres. Hooket håndterer den asynkrone skrivning og eventuelle fejl internt, så komponenterne forbliver enkle.
Nulstilling af tilstanden copied
Inde i hooket skal du efter en vellykket kopiering kalde setCopied(true) og planlægge en nulstilling med setTimeout(() => setCopied(false), 2000). Gem tidsudløbets id, og ryd det i oprydningen af en useEffect for at forhindre tilstandsopdateringer efter afmontering. Det undgår advarslen "kan ikke opdatere tilstanden på en afmonteret komponent".
Ældre alternativ med execCommand
Ældre browsere og sider uden HTTPS understøtter ikke Clipboard API'et. Det ældre alternativ opretter midlertidigt en textarea, angiver dens værdi, føjer den til body, kalder document.execCommand('copy') og fjerner elementet. Denne tilgang er synkron og virker overalt, selvom den er forældet.
Kontrol af Clipboard API'ets tilgængelighed
Kontrollér følgende, før du bruger Clipboard API'et: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Hvis det ikke er tilgængeligt, skal du bruge den ældre tilgang med execCommand som alternativ. Denne forebyggende kontrol forhindrer fejl under kørsel i miljøer, hvor API'et ikke understøttes.
Tilladelse til læsning fra udklipsholderen
Læsning fra udklipsholderen kræver brugertilladelse via Permissions API. Du kan forespørge om den aktuelle tilstand: navigator.permissions.query({ name: 'clipboard-read' }) returnerer en PermissionStatus med en state på granted, denied eller prompt. Browseren viser automatisk en tilladelsesdialog, når du kalder readText().
Krav om HTTPS
Clipboard API er kun tilgængeligt i sikre kontekster (HTTPS eller localhost). På HTTP-sider er navigator.clipboard undefined. Det er en sikkerhedsbegrænsning, fordi indholdet af udklipsholderen kan være følsomt. Kontrollér altid API'ets tilgængelighed, før du refererer til dets metoder, for at undgå nulreferencefejl.
Test af udklipsholderen i jsdom
jsdom (som bruges af Jest) implementerer ikke Clipboard API'et. Opret en mock af det i din testopsætning: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). Det gør det muligt at teste, at din komponent kalder writeText med det korrekte argument uden et ægte browsermiljø.
Krav til skrivning til udklipsholderen
Hvornår kan navigator.clipboard.writeText() kaldes sikkert i browseren?
Opsummering af lektionen: Clipboard API i React
Brug navigator.clipboard.writeText() i en klikhåndtering til at kopiere tekst. Opret en useCopyToClipboard-hook, der returnerer [copied, copyFn], og som nulstilles efter et bestemt tidsrum. Kontrollér altid, om API'et er tilgængeligt, tilbyd en reservefunktion med execCommand til ældre browsere, og opret en mock af navigator.clipboard i Jest-tests.
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Clipboard API: Kopiér og indsæt i React” gratis?
Ja — hele teksten til “Clipboard API: Kopiér og indsæt i React” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Clipboard API: Kopiér og indsæt i React”?
Implementér knapper til kopiering til udklipsholderen med den moderne Clipboard API, og tilbyd en problemfri fallback til ældre browsere. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Clipboard API: Kopiér og indsæt i React”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Clipboard API: Kopiér og indsæt i React
- Geolocation API i React-komponenter
- Notifications API og håndtering af tilladelser
- IntersectionObserver til scroll-udløste effekter