0Pricing
React Academy · บทเรียน

Clipboard API: การคัดลอกและวางใน React

สร้างปุ่มคัดลอกไปยังคลิปบอร์ดโดยใช้ Clipboard API แบบใหม่ และจัดการเบราว์เซอร์รุ่นเก่าอย่างเหมาะสมเมื่อใช้ทางเลือกสำรอง

Clipboard API: การคัดลอกและวางใน React เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเขียนลงคลิปบอร์ด

navigator.clipboard.writeText(text) จะเขียนสตริงลงในคลิปบอร์ดของระบบและคืนค่าเป็นพรอมิส นี่เป็นวิธีทดแทนสมัยใหม่สำหรับแนวทางเดิมอย่าง execCommand ควร await พรอมิสเสมอและจัดการการปฏิเสธที่อาจเกิดขึ้น เช่น เมื่อผู้ใช้ปฏิเสธการเข้าถึงคลิปบอร์ด

การอ่านจากคลิปบอร์ด

navigator.clipboard.readText() จะอ่านเนื้อหาปัจจุบันของคลิปบอร์ดเป็นสตริงและคืนค่าเป็นพรอมิสเช่นกัน การอ่านต้องใช้สิทธิ์ clipboard-read ซึ่งเบราว์เซอร์จะแจ้งให้ผู้ใช้อนุญาต ในทางปฏิบัติ การอ่านคลิปบอร์ดมักใช้น้อยกว่าการเขียนในแอปพลิเคชัน React ทั่วไป

การเขียนลงคลิปบอร์ดต้องมีการโต้ตอบจากผู้ใช้

เบราว์เซอร์กำหนดให้เรียก clipboard.writeText ได้เฉพาะภายในตัวจัดการการโต้ตอบของผู้ใช้ เช่น เหตุการณ์คลิกหรือการกดแป้น การเรียกใช้ภายใน useEffect หรือแบบอะซิงโครนัสหลังการโต้ตอบจะทำให้เกิดข้อผิดพลาดด้านความปลอดภัย ควรเรียกการเขียนโดยตรงจากตัวจัดการ onClick เสมอ

รูปแบบส่วนติดต่อสำหรับคัดลอกลงคลิปบอร์ด

รูปแบบมาตรฐานคือ ผู้ใช้คลิกปุ่มคัดลอก ตัวจัดการของคุณเรียก navigator.clipboard.writeText(value) เมื่อสำเร็จ ให้กำหนดสถานะ copied เป็น true และให้ปุ่มแสดงเครื่องหมายถูกหรือป้ายกำกับ "คัดลอกแล้ว!" ชั่วคราว หลังจากหน่วงเวลาสั้น ๆ ปุ่มจะกลับสู่สถานะปกติ

การสร้างฮุก useCopyToClipboard

ห่อหุ้มตรรกะไว้ในฮุก useCopyToClipboard ที่คืนค่าเป็นทูเพิล: [copied, copyFn] ค่าบูลีน copied ใช้ควบคุมการตอบสนองบนส่วนติดต่อ ส่วน copyFn รับข้อความที่จะคัดลอก ฮุกจะจัดการการเขียนแบบอะซิงโครนัสและข้อผิดพลาดภายใน เพื่อให้คอมโพเนนต์เรียบง่าย

การรีเซ็ตสถานะการคัดลอก

ภายในฮุก หลังจากคัดลอกสำเร็จ ให้เรียก setCopied(true) และกำหนดเวลาสำหรับรีเซ็ตด้วย setTimeout(() => setCopied(false), 2000) เก็บรหัสประจำตัวของตัวจับเวลาไว้และล้างค่าดังกล่าวในการล้างข้อมูลของ useEffect เพื่อป้องกันการอัปเดตสถานะหลังถอดคอมโพเนนต์ออก วิธีนี้หลีกเลี่ยงคำเตือน "ไม่สามารถอัปเดตสถานะของคอมโพเนนต์ที่ถอดออกแล้วได้"

ค่าทดแทนแบบเดิมด้วย execCommand

เบราว์เซอร์รุ่นเก่าและหน้าเว็บที่ไม่ใช่ HTTPS ไม่รองรับ Clipboard API ค่าทดแทนแบบเดิมจะสร้าง textarea ชั่วคราว กำหนดค่าให้ เพิ่มลงในส่วนเนื้อหาของหน้า เรียก document.execCommand('copy') แล้วลบอิลิเมนต์ออก วิธีนี้ทำงานแบบซิงโครนัสและใช้ได้ทุกที่ แม้จะเลิกแนะนำแล้วก็ตาม

การตรวจสอบความพร้อมใช้งานของ Clipboard API

ก่อนใช้ Clipboard API ให้ตรวจสอบดังนี้: navigator.clipboard && typeof navigator.clipboard.writeText === 'function' หากไม่พร้อมใช้งาน ให้ใช้แนวทางเดิมอย่าง execCommand เป็นค่าทดแทน การตรวจสอบเชิงป้องกันนี้ป้องกันข้อผิดพลาดขณะทำงานในสภาพแวดล้อมที่ไม่รองรับ API

สิทธิ์การอ่านคลิปบอร์ด

การอ่านคลิปบอร์ดต้องได้รับสิทธิ์จากผู้ใช้ผ่าน Permissions API คุณสามารถสอบถามสถานะปัจจุบันได้ดังนี้: navigator.permissions.query({ name: 'clipboard-read' }) จะคืนค่า PermissionStatus ที่มี state เป็น granted, denied หรือ prompt เบราว์เซอร์จะแจ้งขอสิทธิ์โดยอัตโนมัติเมื่อคุณเรียก readText()

ข้อกำหนด HTTPS

Clipboard API ใช้งานได้เฉพาะในบริบทที่ปลอดภัย (HTTPS หรือ localhost) บนหน้า HTTP ค่า navigator.clipboard จะเป็น undefined นี่เป็นข้อจำกัดด้านความปลอดภัย เนื่องจากเนื้อหาในคลิปบอร์ดอาจมีข้อมูลละเอียดอ่อน ควรตรวจสอบความพร้อมใช้งานของ API ก่อนอ้างอิงเมธอดเสมอ เพื่อหลีกเลี่ยงข้อผิดพลาดจากการอ้างอิงค่า null

การทดสอบคลิปบอร์ดใน jsdom

jsdom (ซึ่ง Jest ใช้งาน) ยังไม่รองรับ Clipboard API ให้จำลองไว้ในการตั้งค่าการทดสอบของ Jest: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }) วิธีนี้ช่วยให้คุณทดสอบได้ว่าคอมโพเนนต์เรียกใช้ writeText ด้วยอาร์กิวเมนต์ที่ถูกต้อง โดยไม่ต้องใช้สภาพแวดล้อมเบราว์เซอร์จริง

ข้อกำหนดการเขียนลงคลิปบอร์ด

ในเบราว์เซอร์ คุณสามารถเรียกใช้ navigator.clipboard.writeText() ได้อย่างปลอดภัยเมื่อใด

บทสรุปบทเรียน: API คลิปบอร์ดใน React

ใช้ navigator.clipboard.writeText() ภายในตัวจัดการคลิกเพื่อคัดลอกข้อความ สร้างฮุก useCopyToClipboard ที่คืนค่า [copied, copyFn] พร้อมรีเซ็ตตามเวลา ตรวจสอบความพร้อมใช้งานของ API เสมอ จัดเตรียมทางเลือกสำรองด้วย execCommand สำหรับเบราว์เซอร์รุ่นเก่า และจำลอง navigator.clipboard ในการทดสอบของ Jest

คำถามที่พบบ่อย

บทเรียน “Clipboard API: การคัดลอกและวางใน React” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Clipboard API: การคัดลอกและวางใน React” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Clipboard API: การคัดลอกและวางใน React”

สร้างปุ่มคัดลอกไปยังคลิปบอร์ดโดยใช้ Clipboard API แบบใหม่ และจัดการเบราว์เซอร์รุ่นเก่าอย่างเหมาะสมเมื่อใช้ทางเลือกสำรอง คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “Clipboard API: การคัดลอกและวางใน React” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Clipboard API: การคัดลอกและวางใน React
  2. Geolocation API ในคอมโพเนนต์ React
  3. Notifications API และการจัดการสิทธิ์
  4. IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน
← กลับไปที่ React Academy