Clipboard API: Menyalin dan Menempel di React
Implementasikan tombol salin ke papan klip menggunakan Clipboard API modern dan sediakan fallback yang baik untuk browser lama.
Clipboard API: Menyalin dan Menempel di React adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Menulis ke Papan Klip
navigator.clipboard.writeText(text) menulis string ke papan klip sistem dan mengembalikan hasil asinkron. Ini merupakan pengganti modern untuk pendekatan lama execCommand. Selalu tunggu hasilnya hingga selesai dan tangani kemungkinan penolakan, misalnya ketika pengguna menolak akses papan klip.
Membaca dari Papan Klip
navigator.clipboard.readText() membaca isi papan klip saat ini sebagai teks dan juga mengembalikan hasil asinkron. Pembacaan memerlukan izin clipboard-read, yang akan diminta oleh peramban kepada pengguna. Dalam praktiknya, pembacaan papan klip lebih jarang digunakan daripada penulisan dalam aplikasi React pada umumnya.
Penulisan ke Papan Klip Memerlukan Gestur Pengguna
Peramban menetapkan bahwa clipboard.writeText hanya dapat dipanggil di dalam penangan gestur pengguna, seperti peristiwa klik atau penekanan tombol. Memanggilnya di dalam useEffect atau secara asinkron setelah gestur akan menimbulkan kesalahan keamanan. Selalu picu penulisan secara langsung dari penangan onClick.
Pola Antarmuka Pengguna Salin ke Papan Klip
Pola standarnya adalah: pengguna mengeklik tombol salin, penangan Anda memanggil navigator.clipboard.writeText(value), setelah berhasil Anda menetapkan status copied ke true, dan tombol untuk sementara menampilkan tanda centang atau label "Tersalin!". Setelah jeda singkat, tombol kembali ke keadaan normal.
Membuat Pengait useCopyToClipboard
Rangkum logika ini dalam pengait useCopyToClipboard yang mengembalikan tupel: [copied, copyFn]. Nilai benar-salah copied mengendalikan umpan balik antarmuka, sedangkan copyFn menerima teks yang akan disalin. Pengait ini menangani penulisan asinkron dan kesalahan apa pun secara internal agar komponen tetap sederhana.
Mengatur Ulang Status Tersalin
Di dalam pengait, setelah penyalinan berhasil, tetapkan setCopied(true) dan jadwalkan pengaturan ulang dengan setTimeout(() => setCopied(false), 2000). Simpan ID pengatur waktu dan hapus ID tersebut dalam pembersihan useEffect untuk mencegah pembaruan status setelah komponen dilepas. Cara ini menghindari peringatan "tidak dapat memperbarui status pada komponen yang telah dilepas".
Cadangan Lama dengan execCommand
Peramban lama dan halaman non-HTTPS tidak mendukung API Papan Klip. Cadangan lama ini membuat textarea sementara, menetapkan nilainya, menambahkannya ke badan dokumen, memanggil document.execCommand('copy'), lalu menghapus elemennya. Pendekatan ini berjalan secara sinkron dan berfungsi di mana saja, meskipun sudah tidak digunakan lagi.
Mendeteksi Ketersediaan API Papan Klip
Sebelum menggunakan API Papan Klip, lakukan pemeriksaan: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. Jika tidak tersedia, gunakan pendekatan lama execCommand. Pemeriksaan pencegahan ini mencegah kesalahan saat dijalankan di lingkungan yang tidak mendukung API tersebut.
Izin Membaca Papan Klip
Pembacaan papan klip memerlukan izin pengguna melalui API Izin. Anda dapat menanyakan status saat ini: navigator.permissions.query({ name: 'clipboard-read' }) mengembalikan PermissionStatus dengan state berupa granted, denied, atau prompt. Peramban akan meminta izin secara otomatis ketika Anda memanggil readText().
Persyaratan HTTPS
API Papan Klip hanya tersedia dalam konteks aman (HTTPS atau localhost). Pada halaman HTTP, navigator.clipboard bernilai undefined. Ini merupakan pembatasan keamanan karena isi papan klip dapat bersifat sensitif. Selalu periksa ketersediaan API sebelum merujuk ke metodenya untuk menghindari kesalahan referensi null.
Menguji Papan Klip di jsdom
jsdom (yang digunakan oleh Jest) tidak mengimplementasikan API Papan Klip. Buat tiruan API tersebut dalam penyiapan pengujian Anda: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). Dengan demikian, Anda dapat menguji bahwa komponen memanggil writeText dengan argumen yang benar tanpa lingkungan peramban sungguhan.
Persyaratan Penulisan ke Papan Klip
Kapan navigator.clipboard.writeText() dapat dipanggil dengan aman di peramban?
Ringkasan Pelajaran: API Papan Klip di React
Gunakan navigator.clipboard.writeText() di dalam penangan klik untuk menyalin teks. Buat hook useCopyToClipboard yang mengembalikan [copied, copyFn] dengan pengaturan ulang berjangka waktu. Selalu periksa ketersediaan API, sediakan alternatif execCommand untuk peramban lama, dan buat tiruan navigator.clipboard dalam pengujian Jest.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Clipboard API: Menyalin dan Menempel di React” gratis?
Ya — teks lengkap “Clipboard API: Menyalin dan Menempel di React” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Clipboard API: Menyalin dan Menempel di React”?
Implementasikan tombol salin ke papan klip menggunakan Clipboard API modern dan sediakan fallback yang baik untuk browser lama. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Clipboard API: Menyalin dan Menempel di React” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Clipboard API: Menyalin dan Menempel di React
- Geolocation API dalam Komponen React
- Notifications API dan Penanganan Izin
- IntersectionObserver untuk Efek yang Dipicu Guliran