SortableContext สำหรับรายการที่จัดลำดับใหม่ได้
ใช้ SortableContext และ useSortable เพื่อสร้างรายการที่จัดลำดับใหม่ได้พร้อมแอนิเมชันลื่นไหล
SortableContext สำหรับรายการที่จัดลำดับใหม่ได้ เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
หน้าที่ของ SortableContext
SortableContext เป็นองค์ประกอบเฉพาะทางสำหรับการลากและวางที่ครอบรายการซึ่งจัดลำดับใหม่ได้ ขณะที่ useDraggable และ useDroppable จัดการการลากและวางทั่วไป SortableContext จะจัดการกรณีที่ต้องจัดลำดับรายการในรายการใหม่ด้วยการลากไปยังตำแหน่งใหม่โดยเฉพาะ
พร็อพรายการ
SortableContext ต้องมีพร็อพ items ซึ่งเป็นอาร์เรย์ของ ID แบบสตริงหรือตัวเลขที่ไม่ซ้ำกัน และต้องตรงกับ ID ที่ใช้ในองค์ประกอบย่อยซึ่งจัดเรียงได้ ลำดับของอาร์เรย์นี้จะกำหนดลำดับปัจจุบันของรายการ เมื่อคุณอัปเดตอาร์เรย์นี้ในสถานะ รายการจะแสดงผลใหม่ตามลำดับใหม่
กลยุทธ์การจัดเรียง
SortableContext รองรับพร็อพ strategy ซึ่งควบคุมวิธีจัดเรียงรายการ verticalListSortingStrategy ใช้สำหรับรายการแนวตั้งและคำนวณจุดแทรกตามตำแหน่งแนวตั้ง horizontalListSortingStrategy ใช้สำหรับรายการแนวนอน rectSortingStrategy ใช้สำหรับตาราง ให้เลือกกลยุทธ์ที่ตรงกับรูปแบบการจัดวางของคุณ
ฮุก useSortable
ภายใน SortableContext รายการแต่ละรายการจะใช้ฮุก useSortable({ id }) แทน useDraggable โดย useSortable เป็นส่วนขยายที่ครอบคลุมความสามารถของ useDraggable และส่งคืนแอตทริบิวต์ ตัวรับฟังเหตุการณ์ setNodeRef และการแปลงแบบเดียวกัน พร้อมค่าเพิ่มเติมสำหรับการจัดเรียง เช่น isDragging และ overIndex
isDragging สำหรับสถานะการแสดงผล
ค่าของ isDragging จาก useSortable จะเป็นจริงขณะที่รายการกำลังถูกลากอยู่ โดยทั่วไปคุณจะใช้ค่านี้เพื่อลดความทึบหรือเพิ่มรูปแบบตัวแทนให้กับรายการต้นฉบับในรายการขณะถูกลาก ช่องว่างที่มองเห็นได้นี้จะแสดงให้ผู้ใช้เห็นว่ารายการนั้นอยู่ที่ใดในรายการ
ยูทิลิตี arrayMove
ไลบรารีนี้ส่งออกยูทิลิตี arrayMove(array, fromIndex, toIndex) จาก @dnd-kit/sortable ยูทิลิตีนี้ส่งคืนอาร์เรย์ใหม่ที่ย้ายรายการจาก fromIndex ไปยัง toIndex นี่เป็นวิธีมาตรฐานในการอัปเดตอาร์เรย์สถานะเมื่อการลากเพื่อจัดเรียงเสร็จสิ้น
การนำ onDragEnd มาใช้สำหรับการจัดเรียง
ในการเรียกกลับ onDragEnd ของ DndContext สำหรับรายการที่จัดเรียงได้ ให้ค้นหาดัชนีเดิมและดัชนีใหม่โดยใช้ items.indexOf(event.active.id) และ items.indexOf(event.over?.id) หากดัชนีทั้งสองถูกต้องและแตกต่างกัน ให้เรียก setItems(arrayMove(items, oldIndex, newIndex)) เพื่อจัดเรียงอาร์เรย์ใหม่
แอนิเมชันราบรื่นของรายการที่ถูกเลื่อน
เมื่อมีการลากรายการ รายการอื่นในรายการจะเคลื่อนไหวไปยังตำแหน่งใหม่เพื่อแสดงว่ารายการที่ลากจะไปอยู่ที่ใด useSortable มอบการแปลงด้วย CSS ให้กับรายการที่ไม่ได้ถูกลากแต่ละรายการ เพื่อเลื่อนหลบและเปิดทาง การเพิ่มการเปลี่ยนผ่านของ CSS ให้กับการแปลงนี้จะสร้างแอนิเมชันการเคลื่อนไหวที่ราบรื่น
การเปลี่ยนผ่านเพื่อการเคลื่อนไหวที่ราบรื่น
ใช้การเปลี่ยนผ่านของ CSS กับพร็อพเพอร์ตีการแปลงของรายการที่จัดเรียงได้: transition: isDragging ? undefined : transform ? 'transform 200ms ease' : undefined ขณะที่รายการกำลังถูกลาก ไม่จำเป็นต้องมีการเปลี่ยนผ่าน เพราะรายการควรติดตามเคอร์เซอร์โดยตรง เมื่อรายการถูกเลื่อนออกจากตำแหน่ง การเปลี่ยนผ่านจะสร้างแอนิเมชันการเลื่อนที่ราบรื่น
การใช้ร่วมกับ DragOverlay
เพื่อประสบการณ์ผู้ใช้ที่ดีที่สุด ให้ใช้ SortableContext ร่วมกับ DragOverlay รายการที่กำลังลากในรายการจะกลายเป็นตัวแทนแบบกึ่งโปร่งใสโดยใช้ isDragging ขณะที่ DragOverlay จะแสดงสำเนาทึบแสงที่ยกสูงและติดตามเคอร์เซอร์ วิธีนี้ช่วยหลีกเลี่ยงความผิดปกติทางภาพที่รายการซึ่งกำลังลากกระโดดไปมาระหว่างตำแหน่งต่าง ๆ
รายการแนวตั้งและแนวนอน
SortableContext ทำงานได้ดีไม่แพ้กันกับรายการแนวตั้ง เช่น กระดานงานและรายการสิ่งที่ต้องทำ และรายการแนวนอน เช่น แถบแท็บและแถบภาพหมุน เปลี่ยนระหว่างกลยุทธ์ได้โดยแก้ไขพร็อพกลยุทธ์ คุณยังสามารถใช้กับรูปแบบตารางด้วย rectSortingStrategy ซึ่งคำนวณช่องตารางที่ใกล้ที่สุดตามตำแหน่งการลาก
arrayMove ใน onDragEnd
เมื่อเรียกใช้ arrayMove ภายใน onDragEnd เพื่อจัดเรียงรายการที่จัดเรียงได้ จะต้องส่งอาร์กิวเมนต์ใดบ้าง
ทบทวนบทเรียน: SortableContext
SortableContext ครอบรายการที่จัดลำดับใหม่ได้ และต้องมีอาร์เรย์ items ที่ประกอบด้วย ID ซึ่งไม่ซ้ำกัน รวมถึงกลยุทธ์สำหรับแนวตั้ง แนวนอน หรือตาราง รายการแต่ละรายการใช้ useSortable แทน useDraggable จึงมี isDragging และ overIndex เพิ่มขึ้น ใน onDragEnd ฟังก์ชัน arrayMove จะจัดเรียงอาร์เรย์ใหม่โดยใช้ดัชนีเดิมและดัชนีใหม่ การเปลี่ยนผ่านของ CSS บนการแปลงจะทำให้รายการที่ถูกเลื่อนเคลื่อนไหวอย่างราบรื่น
คำถามที่พบบ่อย
บทเรียน “SortableContext สำหรับรายการที่จัดลำดับใหม่ได้” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “SortableContext สำหรับรายการที่จัดลำดับใหม่ได้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “SortableContext สำหรับรายการที่จัดลำดับใหม่ได้”
ใช้ SortableContext และ useSortable เพื่อสร้างรายการที่จัดลำดับใหม่ได้พร้อมแอนิเมชันลื่นไหล คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “SortableContext สำหรับรายการที่จัดลำดับใหม่ได้” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก
- DndContext, useDraggable และ useDroppable
- SortableContext สำหรับรายการที่จัดลำดับใหม่ได้
- โอเวอร์เลย์การลากกำหนดเองและ DnD หลายคอนเทนเนอร์