Overlay personalizzati per il drag e DnD tra più contenitori
Renderizzare anteprime personalizzate durante il trascinamento con DragOverlay e implementare interazioni di trascinamento tra contenitori in stile kanban
Overlay personalizzati per il drag e DnD tra più contenitori è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
DragOverlay come portale
DragOverlay esegue il rendering del contenuto come portale React, aggiungendolo direttamente a document.body anziché all'interno dell'albero DOM di DndContext. In questo modo non viene mai ritagliato dai contenitori con overflow:hidden o overflow:scroll e appare sempre sopra tutti gli altri elementi senza richiedere una gestione manuale di z-index.
Indipendenza visiva dell'overlay
Poiché DragOverlay è separato dall'elemento originale, può avere stili visivi che comprometterebbero il layout se applicati all'originale. Può aggiungere un'ombra esterna, una trasformazione di scala (rendendolo leggermente più grande dell'originale) o un effetto di rotazione. Questi segnali visivi comunicano all'utente che l'elemento è "sollevato" e in movimento.
Tracciamento di activeDragId
DragOverlay deve sapere che cosa renderizzare. Tenga traccia dell'ID del trascinamento attivo nello stato: lo imposti in onDragStart con event.active.id e lo cancelli in onDragEnd con null. All'interno di DragOverlay, usi questo ID per trovare i dati dell'elemento corrispondente e renderizzare il componente di anteprima corretto.
Segnaposto nella posizione originale
Quando usa DragOverlay, l'elemento trascinabile originale dovrebbe diventare un segnaposto visivo durante il trascinamento. Se usa useSortable, applichi opacity: 0 o un bordo tratteggiato quando isDragging è true. In questo modo vengono mostrati lo "slot" in cui l'elemento tornerà se il trascinamento viene annullato e lo spazio che lascia quando viene spostato in una nuova posizione.
Configurazione del DnD tra più contenitori
Il drag-and-drop tra più contenitori consente di trascinare gli elementi tra due o più liste separate. La configurazione richiede un singolo DndContext che racchiuda tutti i contenitori, ognuno dei quali deve avere il proprio SortableContext. Tutti gli ID degli elementi di tutti i contenitori devono essere univoci a livello globale per evitare collisioni.
Uso di onDragOver per lo spostamento tra contenitori
Per ottenere un'animazione fluida tra contenitori diversi, aggiorni lo stato in onDragOver invece di attendere onDragEnd. Quando l'elemento trascinato entra in un nuovo contenitore, lo sposti immediatamente dal contenitore di origine a quello di destinazione. In questo modo l'utente riceve un feedback visivo in tempo reale sulla posizione in cui verrà rilasciato l'elemento.
ID univoci in tutti i contenitori
Quando si trascina tra più istanze di SortableContext, tutti gli ID degli elementi devono essere univoci nell'intero DndContext, non solo all'interno di ogni lista. Se due contenitori condividono un ID, dnd-kit non può determinare quale elemento sia attivo. Usi UUID o anteponga agli ID il nome del contenitore per garantire l'univocità globale.
active.data.current per i metadati personalizzati
useDraggable e useSortable accettano un'opzione data: useSortable({ id, data: { containerId, type } }). Questi dati sono disponibili nei callback degli eventi di trascinamento come event.active.data.current. Negli scenari con più contenitori, può memorizzare nei dati l'ID del contenitore di origine e usarlo in onDragOver per sapere da dove proviene l'elemento.
Aggiornamento dello stato dei contenitori durante il trascinamento
Lo stato per più contenitori usa in genere un oggetto indicizzato per ID del contenitore, ciascuno dei quali contiene un array di elementi. In onDragOver, quando l'elemento attivo si trova in un contenitore diverso da quello del target indicato da over, rimuova l'elemento dall'array del contenitore di origine e lo inserisca nell'array del contenitore di destinazione nella posizione corretta.
Navigazione accessibile tra più contenitori
KeyboardSensor funziona anche con il DnD tra più contenitori. Gli utenti premono i tasti freccia per spostarsi tra gli elementi all'interno di un contenitore e, quando raggiungono il bordo, possono continuare verso i contenitori adiacenti. L'algoritmo collisionDetection di SortableContext determina il target di rilascio valido più vicino in base alla posizione.
Algoritmi di rilevamento delle collisioni
DndContext accetta una prop collisionDetection che determina il modo in cui calcola su quale elemento droppable si trova l'elemento trascinato. L'impostazione predefinita closestCenter funziona bene per la maggior parte delle liste. closestCorners è più adatta alle griglie. pointerWithin attiva un elemento droppable solo quando il cursore si trova fisicamente al suo interno.
Comportamento del portale DragOverlay
Dove esegue il rendering del contenuto DragOverlay nel DOM?
Riepilogo della lezione: overlay e più contenitori
DragOverlay viene renderizzato come un portale in document.body, mantenendo l'indipendenza visiva dai vincoli del layout. Tenga traccia di activeDragId in onDragStart/onDragEnd per renderizzare il contenuto corretto dell'overlay. Il DnD tra più contenitori usa più istanze di SortableContext all'interno di un unico DndContext, con ID univoci a livello globale. Aggiorni lo stato in onDragOver per ottenere animazioni fluide tra contenitori, usando event.active.data.current per i metadati del contenitore di origine.
Domande Frequenti
La lezione «Overlay personalizzati per il drag e DnD tra più contenitori» è gratuita?
Sì — il testo completo di «Overlay personalizzati per il drag e DnD tra più contenitori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Overlay personalizzati per il drag e DnD tra più contenitori»?
Renderizzare anteprime personalizzate durante il trascinamento con DragOverlay e implementare interazioni di trascinamento tra contenitori in stile kanban Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Overlay personalizzati per il drag e DnD tra più contenitori»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Architettura di dnd-kit e design incentrato sull'accessibilità
- DndContext, useDraggable e useDroppable
- SortableContext per liste riordinabili
- Overlay personalizzati per il drag e DnD tra più contenitori