สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก
ทำความเข้าใจโมเดลเซนเซอร์ของ dnd-kit ประกาศการช่วยการเข้าถึง และความแตกต่างจาก react-beautiful-dnd
สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใด dnd-kit จึงมาแทนที่ react-beautiful-dnd
react-beautiful-dnd เคยเป็นไลบรารีการลากและวางสำหรับ React ที่ได้รับความนิยม แต่ถูกเก็บเข้าสู่คลังอย่างเป็นทางการในปี 2023 และไม่มีการดูแลรักษาอีกต่อไป ชุมชนจึงหันมาใช้ dnd-kit อย่างรวดเร็วในฐานะตัวเลือกทดแทนที่แนะนำ ซึ่งออกแบบขึ้นใหม่ตั้งแต่ต้นโดยคำนึงถึง React สมัยใหม่และการเข้าถึงสำหรับทุกคน
สถาปัตยกรรมหลักของ dnd-kit
dnd-kit สร้างขึ้นบนแนวคิดทางสถาปัตยกรรมสำคัญสามประการ ได้แก่ DndContext จัดการสถานะการลากทั้งหมดและประสานงานระหว่างองค์ประกอบที่ลากได้กับองค์ประกอบที่วางได้ เซนเซอร์ แยกวิธีรับข้อมูลเข้าออกจากรายละเอียดการทำงาน ทำให้ตรรกะการลากเดียวกันรองรับเมาส์ หน้าจอสัมผัส และแป้นพิมพ์ และ ตัวปรับแต่ง ช่วยให้คุณจัดตำแหน่ง จำกัดขอบเขต หรือแปลงการเคลื่อนที่ของการลากได้
เซนเซอร์: การแยกชั้นข้อมูลเข้า
dnd-kit มีเซนเซอร์ในตัวสามชนิด PointerSensor จัดการข้อมูลเข้าจากทั้งเมาส์และหน้าจอสัมผัสผ่าน API เหตุการณ์ตัวชี้แบบรวมเป็นหนึ่งเดียว KeyboardSensor รองรับการลากและวางด้วยแป้นพิมพ์เพียงอย่างเดียวอย่างสมบูรณ์ TouchSensor จัดการเหตุการณ์สัมผัสแบบเดิม คุณกำหนดค่าเซนเซอร์ผ่านพร็อพ sensors ของ DndContext
คำแนะนำการลากและวางด้วยแป้นพิมพ์
dnd-kit มีการนำทางด้วยแป้นพิมพ์ในตัวเพื่อรองรับการเข้าถึง ผู้ใช้กด ปุ่มเว้นวรรค เพื่อหยิบรายการขึ้นมา กด ปุ่มลูกศร เพื่อย้ายไปยังตำแหน่งใหม่ กด ปุ่มเว้นวรรคอีกครั้ง เพื่อวาง และกด ปุ่มยกเลิก เพื่อยกเลิกการลากโดยไม่เปลี่ยนแปลงข้อมูล ระบบจะแจ้งการโต้ตอบเหล่านี้ให้โปรแกรมอ่านหน้าจอทราบโดยอัตโนมัติ
การรองรับ ARIA และโปรแกรมอ่านหน้าจอ
dnd-kit จะเพิ่ม aria-grabbed ให้รายการที่ลากได้โดยอัตโนมัติ เพื่อระบุสถานะการหยิบให้เทคโนโลยีสิ่งอำนวยความสะดวกทราบ และใช้ aria-dropeffect กับพื้นที่ที่วางได้ เพื่อสื่อสารว่าจะเกิดอะไรขึ้นเมื่อวางรายการลงไป ภูมิภาคถ่ายทอดสดจะแจ้งการอัปเดตสถานะ ทำให้ผู้ใช้โปรแกรมอ่านหน้าจอได้ยินการยืนยัน เช่น "หยิบรายการขึ้นแล้ว" หรือ "วางรายการสำเร็จแล้ว"
การออกแบบที่ตัดส่วนที่ไม่ได้ใช้ได้และไม่ผูกกับ CSS
dnd-kit ออกแบบมาให้สามารถตัดส่วนที่ไม่ได้ใช้ออกจากชุดรวมได้ หมายความว่าคุณจะนำเข้าเฉพาะส่วนที่ใช้งานจริงเท่านั้น ไม่มี CSS รวมมาให้ — คุณต้องรับผิดชอบการจัดรูปแบบภาพทั้งหมดเอง จึงควบคุมรูปลักษณ์ขององค์ประกอบที่ลากได้ โอเวอร์เลย์ และพื้นที่วางได้อย่างเต็มที่ วิธีนี้ช่วยให้ขนาดชุดรวมมีขนาดเล็กที่สุด
การเรียกกลับเหตุการณ์ของ DndContext
DndContext มีการเรียกกลับเหตุการณ์หลักสามรายการสำหรับติดตามวงจรการลาก onDragStart จะทำงานเมื่อผู้ใช้เริ่มลาก และได้รับ ID ของรายการที่กำลังลาก onDragOver จะทำงานอย่างต่อเนื่องขณะที่รายการที่ลากเคลื่อนที่อยู่เหนือเป้าหมายที่วางได้ onDragEnd จะทำงานเมื่อการลากเสร็จสิ้น โดยให้ทั้งรายการที่กำลังลากและเป้าหมายที่วาง
การกำหนดค่าเซนเซอร์บน DndContext
คุณส่งอาร์เรย์ของการกำหนดค่าเซนเซอร์ให้กับ DndContext โดยใช้พร็อพ sensors ร่วมกับฮุก useSensors เซนเซอร์แต่ละรายการจะเริ่มต้นด้วย useSensor(SensorClass, options) ตัวอย่างเช่น คุณสามารถกำหนดค่า PointerSensor ให้มีระยะลากขั้นต่ำ เพื่อป้องกันการลากโดยไม่ตั้งใจขณะคลิก
ตัวปรับแต่งสำหรับจำกัดการเคลื่อนที่
ตัวปรับแต่งจะแปลงพิกัดการลากก่อนนำไปใช้กับองค์ประกอบที่กำลังลาก restrictToVerticalAxis จะล็อกการเคลื่อนที่ให้อยู่ในทิศทางเดียว restrictToParentElement จะจำกัดรายการที่กำลังลากให้อยู่ภายในคอนเทนเนอร์ของรายการนั้น snapCenterToCursor จะจัดองค์ประกอบให้จุดกึ่งกลางติดตามเคอร์เซอร์ คุณสามารถประกอบตัวปรับแต่งหลายรายการไว้ในอาร์เรย์เดียวกันได้
ระบบ ID ขององค์ประกอบที่วางได้และลากได้
องค์ประกอบที่ลากได้และวางได้ทุกองค์ประกอบต้องมี ID ที่เป็นสตริงหรือตัวเลขและไม่ซ้ำกัน ID เหล่านี้เป็นวิธีหลักที่ dnd-kit ใช้ติดตามว่ากำลังลากอะไรและจะวางลงที่ใด ใน onDragEnd ให้ใช้ event.active.id เพื่ออ่าน ID ของรายการที่กำลังลาก และใช้ event.over?.id เพื่ออ่าน ID ของเป้าหมายที่วางได้สำหรับอัปเดตสถานะแอปพลิเคชัน
ปรัชญาที่ให้ความสำคัญกับการเข้าถึงเป็นอันดับแรก
ต่างจากไลบรารีการลากและวางจำนวนมากที่มองว่าการรองรับแป้นพิมพ์เป็นสิ่งที่ค่อยเพิ่มภายหลัง dnd-kit วางการเข้าถึงไว้ที่แกนกลางของการออกแบบ KeyboardSensor เป็นความสามารถหลักระดับเดียวกับ PointerSensor ระบบจะจัดการแอตทริบิวต์ ARIA ทั้งหมดโดยอัตโนมัติ และคุณสามารถกำหนดการประกาศแบบกำหนดเองผ่านพร็อพ accessibility ของ DndContext
การตรวจสอบเซนเซอร์แป้นพิมพ์
dnd-kit ใช้ปุ่มใดเพื่อยกเลิกการลากด้วยแป้นพิมพ์ที่กำลังดำเนินอยู่โดยไม่เปลี่ยนแปลงข้อมูล
สรุปบทเรียน: พื้นฐาน dnd-kit
dnd-kit มาแทนที่ react-beautiful-dnd ซึ่งถูกเก็บเข้าสู่คลังแล้ว และกลายเป็นมาตรฐานของชุมชนสำหรับการลากและวางใน React สถาปัตยกรรมของ dnd-kit มี DndContext เป็นศูนย์กลางสำหรับจัดการสถานะ มีเซนเซอร์สำหรับแยกชั้นข้อมูลเข้า (Pointer, Keyboard, Touch) และมีตัวปรับแต่งสำหรับจำกัดการเคลื่อนที่ การเข้าถึงเป็นความสามารถหลักที่มีมาในตัว ทั้งแอตทริบิวต์ ARIA การประกาศผ่านภูมิภาคถ่ายทอดสด และการนำทางด้วยแป้นพิมพ์อย่างสมบูรณ์
คำถามที่พบบ่อย
บทเรียน “สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก”
ทำความเข้าใจโมเดลเซนเซอร์ของ dnd-kit ประกาศการช่วยการเข้าถึง และความแตกต่างจาก react-beautiful-dnd คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก
- DndContext, useDraggable และ useDroppable
- SortableContext สำหรับรายการที่จัดลำดับใหม่ได้
- โอเวอร์เลย์การลากกำหนดเองและ DnD หลายคอนเทนเนอร์