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

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. สถาปัตยกรรม dnd-kit และการออกแบบที่คำนึงถึงการช่วยการเข้าถึงเป็นหลัก
  2. DndContext, useDraggable และ useDroppable
  3. SortableContext สำหรับรายการที่จัดลำดับใหม่ได้
  4. โอเวอร์เลย์การลากกำหนดเองและ DnD หลายคอนเทนเนอร์
← กลับไปที่ React Academy