Clipboard API: kopiointi ja liittäminen Reactissa
Toteuttakaa leikepöydälle kopioivat painikkeet modernilla Clipboard API:lla ja tarjotkaa hallittu varavaihtoehto vanhemmille selaimille
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ä.
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
- Clipboard API: kopiointi ja liittäminen Reactissa
- Geolocation API React-komponenteissa
- Notifications API ja käyttöoikeuksien käsittely
- IntersectionObserver vierityksen käynnistämille tehosteille