React Academy · Les

Aangepaste drag overlays en DnD met meerdere containers

Render aangepaste sleepvoorbeelden met DragOverlay en implementeer kanbanachtige interacties voor slepen tussen containers

Les 4 van 413 stappen

Aangepaste drag overlays en DnD met meerdere containers is een gratis React Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

DragOverlay als portal

DragOverlay geeft de inhoud weer als een React-portal en voegt deze rechtstreeks toe aan document.body in plaats van binnen de DOM-boom van DndContext. Daardoor wordt de inhoud nooit afgeknipt door containers met overflow:hidden of overflow:scroll en verschijnt deze altijd boven alle andere elementen, zonder dat je z-index handmatig hoeft te beheren.

Onafhankelijke weergave van overlay

Omdat DragOverlay losstaat van het oorspronkelijke element, kan de overlay visuele stijlen hebben die de indeling zouden verstoren als je ze op het oorspronkelijke element toepast. Je kunt een slagschaduw, een schaaltransformatie (waardoor de overlay iets groter wordt dan het origineel) of een rotatie-effect toevoegen. Deze visuele aanwijzingen laten de gebruiker zien dat het item is 'opgetild' en in beweging is.

activeDragId bijhouden

DragOverlay moet weten wat het moet weergeven. Houd de actieve sleep-ID bij in de status: stel deze in onDragStart in met event.active.id en wis deze in onDragEnd met null. Gebruik die ID binnen DragOverlay om de bijbehorende itemgegevens te vinden en de juiste voorbeeldcomponent weer te geven.

Tijdelijke aanduiding op oorspronkelijke positie

Bij gebruik van DragOverlay moet het oorspronkelijke versleepbare item tijdens het slepen een visuele tijdelijke aanduiding worden. Als je useSortable gebruikt, pas je opacity: 0 of een stippelrand toe wanneer isDragging true is. Zo ziet de gebruiker de plek waarnaar het item terugkeert als het slepen wordt geannuleerd en de ruimte die het achterlaat wanneer het naar een nieuwe positie wordt verplaatst.

Instellen van slepen en neerzetten met meerdere containers

Slepen en neerzetten met meerdere containers betekent dat items tussen twee of meer afzonderlijke lijsten kunnen worden verplaatst. De configuratie vereist één DndContext die alle containers omhult, waarbij elke container een eigen SortableContext heeft. Alle item-ID's in alle containers moeten wereldwijd uniek zijn om botsingen te voorkomen.

onDragOver gebruiken voor verplaatsing tussen containers

Werk voor een vloeiende animatie tussen containers de status bij in onDragOver in plaats van te wachten op onDragEnd. Wanneer het gesleepte item een nieuwe container binnengaat, verplaats je het onmiddellijk van de broncontainer naar de doelcontainer. Zo krijgt de gebruiker realtime visuele terugkoppeling over waar het item terechtkomt.

Unieke ID's voor alle containers

Bij het slepen tussen meerdere SortableContext-instanties moeten alle item-ID's uniek zijn binnen de volledige DndContext — niet alleen binnen elke lijst. Als twee containers dezelfde ID delen, kan dnd-kit niet bepalen welk item actief is. Gebruik UUID's of geef ID's de containernaam als voorvoegsel om overal unieke ID's te garanderen.

active.data.current voor aangepaste metagegevens

useDraggable en useSortable accepteren een data-optie: useSortable({ id, data: { containerId, type } }). Deze gegevens zijn in callbacks voor sleepgebeurtenissen beschikbaar als event.active.data.current. In scenario's met meerdere containers kun je de ID van de broncontainer in data opslaan en deze in onDragOver gebruiken om te weten waar het item vandaan komt.

Containerstatus bijwerken tijdens slepen

De status van meerdere containers gebruikt meestal een object met container-ID's als sleutels, waarbij elke sleutel een array met items bevat. Wanneer het actieve item in onDragOver in een andere container staat dan het neerzetdoel, verwijder je het item uit de array van de broncontainer en voeg je het op de juiste positie toe aan de array van de doelcontainer.

Toegankelijke navigatie in meerdere containers

KeyboardSensor werkt voor slepen en neerzetten met meerdere containers. Gebruikers drukken op de pijltoetsen om binnen een container tussen items te bewegen. Wanneer ze de rand van een container bereiken, kunnen ze doorgaan naar aangrenzende containers. Het collisionDetection-algoritme van SortableContext bepaalt op basis van de positie het dichtstbijzijnde geldige neerzetdoel.

Botsingsdetectie-algoritmen

DndContext accepteert een collisionDetection-eigenschap die bepaalt hoe wordt berekend boven welk neerzetdoel het gesleepte item zich bevindt. De standaardwaarde closestCenter werkt goed voor de meeste lijsten. closestCorners is beter voor rasters. pointerWithin activeert een neerzetdoel alleen wanneer de cursor zich er daadwerkelijk binnen bevindt.

Waar geeft DragOverlay de inhoud weer in de DOM?

Waar geeft DragOverlay zijn inhoud weer in de DOM?

Samenvatting van de les: overlays en meerdere containers

DragOverlay wordt als portal naar document.body weergegeven en is daardoor visueel onafhankelijk van beperkingen van de indeling. Houd activeDragId bij in onDragStart/onDragEnd om de juiste overlay-inhoud weer te geven. Slepen en neerzetten met meerdere containers gebruikt meerdere SortableContext-instanties binnen één DndContext, met wereldwijd unieke ID's. Werk de status bij in onDragOver voor vloeiende animaties tussen containers en gebruik event.active.data.current voor metagegevens van de broncontainer.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Aangepaste drag overlays en DnD met meerdere containers” gratis?

Ja — de volledige tekst van “Aangepaste drag overlays en DnD met meerdere containers” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Aangepaste drag overlays en DnD met meerdere containers”?

Render aangepaste sleepvoorbeelden met DragOverlay en implementeer kanbanachtige interacties voor slepen tussen containers Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Aangepaste drag overlays en DnD met meerdere containers”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Architectuur en toegankelijkheidsgericht ontwerp van dnd-kit
  2. DndContext, useDraggable en useDroppable
  3. SortableContext voor herschikbare lijsten
  4. Aangepaste drag overlays en DnD met meerdere containers
← Terug naar React Academy