React Academy · Oppitunti

Clipboard API: kopiointi ja liittäminen Reactissa

Toteuttakaa leikepöydälle kopioivat painikkeet modernilla Clipboard API:lla ja tarjotkaa hallittu varavaihtoehto vanhemmille selaimille

Oppitunti 1/413 vaihetta

Clipboard API: kopiointi ja liittäminen Reactissa on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

Leikepöydälle kirjoittaminen

navigator.clipboard.writeText(text) kirjoittaa merkkijonon järjestelmän leikepöydälle ja palauttaa Promisen. Se on vanhan execCommand-tavan nykyaikainen korvaaja. Odottakaa Promisea aina await-operaattorilla ja käsitelkää mahdollinen hylkäys, esimerkiksi silloin, kun käyttäjä estää leikepöydän käytön.

Leikepöydältä lukeminen

navigator.clipboard.readText() lukee leikepöydän nykyisen sisällön merkkijonona ja palauttaa myös Promisen. Lukeminen edellyttää clipboard-read-oikeutta, jonka selain pyytää käyttäjältä. Käytännössä leikepöydältä lukemista käytetään tyypillisissä React-sovelluksissa harvemmin kuin leikepöydälle kirjoittamista.

Leikepöydälle kirjoittaminen edellyttää käyttäjän toimintoa

Selaimet varmistavat, että clipboard.writeText-funktiota voidaan kutsua vain käyttäjän toiminnon käsittelijän sisältä, esimerkiksi napsautus- tai keydown-tapahtumasta. Sen kutsuminen useEffect-funktion sisällä tai asynkronisesti toiminnon jälkeen aiheuttaa suojausvirheen. Käynnistäkää kirjoitus aina suoraan onClick-käsittelijästä.

Leikepöydälle kopioinnin käyttöliittymäkuvio

Yleinen toimintamalli on seuraava: käyttäjä napsauttaa kopiointipainiketta, käsittelijä kutsuu navigator.clipboard.writeText(value)-funktiota, ja onnistumisen jälkeen asetatte copied-tilan arvoksi true. Painike näyttää hetken valintamerkin tai tekstin "Kopioitu!". Lyhyen viiveen jälkeen painike palaa normaalitilaansa.

useCopyToClipboard-hookin rakentaminen

Kapseloikaa logiikka useCopyToClipboard-hookiin, joka palauttaa tuplen: [copied, copyFn]. copied-totuusarvo ohjaa käyttöliittymän palautetta, ja copyFn ottaa kopioitavan tekstin vastaan. Hook käsittelee asynkronisen kirjoituksen ja mahdolliset virheet sisäisesti, joten komponentit pysyvät yksinkertaisina.

copied-tilan nollaaminen

Asettakaa hookissa onnistuneen kopioinnin jälkeen setCopied(true) ja ajoittakaa nollaus kutsulla setTimeout(() => setCopied(false), 2000). Tallentakaa aikakatkaisun tunnus ja tyhjentäkää se useEffect-funktion siivouksessa, jotta tilaa ei päivitetä komponentin irrottamisen jälkeen. Näin vältetään varoitus siitä, ettei irrotetun komponentin tilaa voi päivittää.

Vanha varamenetelmä execCommandilla

Vanhat selaimet ja muut kuin HTTPS-sivut eivät tue Clipboard API:a. Vanha varamenetelmä luo väliaikaisen textarea-elementin, asettaa sen arvon, liittää sen bodyyn, kutsuu document.execCommand('copy')-funktiota ja poistaa elementin. Tämä tapa on synkroninen ja toimii kaikkialla, vaikka se onkin vanhentunut.

Clipboard API:n saatavuuden tarkistaminen

Tarkistakaa ennen Clipboard API:n käyttämistä: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Jos rajapinta ei ole käytettävissä, käyttäkää vanhaa execCommand-tapaa. Tämä varmistava tarkistus estää suoritusnaikaiset virheet ympäristöissä, joissa rajapintaa ei tueta.

Leikepöydän lukuoikeus

Leikepöydältä lukeminen edellyttää käyttäjän lupaa Permissions API:n kautta. Voitte kysyä nykyisen tilan näin: navigator.permissions.query({ name: 'clipboard-read' }) palauttaa PermissionStatus-olion, jonka state voi olla granted, denied tai prompt. Selain pyytää luvan automaattisesti, kun kutsutte readText()-funktiota.

HTTPS-vaatimus

Clipboard API on käytettävissä vain suojatuissa konteksteissa (HTTPS tai localhost). HTTP-sivuilla navigator.clipboard on undefined. Tämä on suojausrajoitus, koska leikepöydän sisältö voi olla arkaluonteista. Tarkistakaa rajapinnan saatavuus aina ennen sen metodien käyttämistä, jotta vältätte null-viitevirheet.

Leikepöydän testaaminen jsdomissa

Jestin käyttämä jsdom ei toteuta Clipboard APIa. Simuloikaa se testiasetuksissa: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). Näin voitte testata, että komponenttinne kutsuu writeText-funktiota oikealla argumentilla ilman oikeaa selainympäristöä.

Leikepöydälle kirjoittamisen vaatimukset

Milloin navigator.clipboard.writeText()-funktiota voidaan kutsua selaimessa turvallisesti?

Oppitunnin kertaus: Clipboard API Reactissa

Käyttäkää navigator.clipboard.writeText()-funktiota napsautuksen käsittelijässä tekstin kopioimiseen. Rakentakaa useCopyToClipboard-hook, joka palauttaa [copied, copyFn]-parin ja nollaa tilan ajastetusti. Tarkistakaa aina API:n saatavuus, tarjotkaa vanhemmille selaimille execCommand-varamenetelmä ja simuloikaa navigator.clipboard Jest-testeissä.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”Clipboard API: kopiointi ja liittäminen Reactissa” ilmainen?

Kyllä – oppitunnin ”Clipboard API: kopiointi ja liittäminen Reactissa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Clipboard API: kopiointi ja liittäminen Reactissa”?

Toteuttakaa leikepöydälle kopioivat painikkeet modernilla Clipboard API:lla ja tarjotkaa hallittu varavaihtoehto vanhemmille selaimille Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Clipboard API: kopiointi ja liittäminen Reactissa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Clipboard API: kopiointi ja liittäminen Reactissa
  2. Geolocation API React-komponenteissa
  3. Notifications API ja käyttöoikeuksien käsittely
  4. IntersectionObserver vierityksen käynnistämille tehosteille
← Takaisin: React Academy