Warum react-beautiful-dnd wählen? Im Vergleich zu react-dnd eignet sich react-beautiful-dnd besser zum Ziehen zwischen Listen, unterstützt mobile Endgeräte und ist einfacher zu verwenden. Grundlegende VerwendungGrundlegende Konzepte
AnwendungFügen Sie den Code, den Sie per Drag & Drop verwenden möchten, in DragDropContext ein. importiere { DragDropContext } von „react-beautiful-dnd“; Klasse App erweitert React.Component { beim ZiehenStart = () => { /*…*/ }; beiDragUpdate = () => { /*…*/ } beiDragEnd = () => { // das einzige, das benötigt wird }; rendern() { zurückkehren ( <DragDropContext onDragStart={this.onDragStart} onDragUpdate={this.onDragUpdate} onDragEnd={this.onDragEnd} > <div>Hallo Welt</div> </DragDropContext> ); } } Bestimmen Sie den abwerfbaren Bereich importiere { DragDropContext, Droppable } von „react-beautiful-dnd“; Klasse App erweitert React.Component { // ... rendern() { zurückkehren ( <DragDropContext onDragStart={this.onDragStart} onDragUpdate={this.onDragUpdate} onDragEnd={this.onDragEnd} > <Abwerfbar, abwerfbareId="abwerfbar-1"> {(bereitgestellt, Schnappschuss) => ( <div ref={bereitgestellt.innerRef} Stil = {{ Hintergrundfarbe: Snapshot.isDraggingOver? 'blau': 'grau'}} {...bereitgestellt.droppableProps} > <h2>Ich bin ein Droppable!</h2> {bereitgestellt.Platzhalter} </div> )} </Abwerfbar> </DragDropContext> ); } }
Verwenden Sie Draggable, um das Drag-Element im Droppable-Bereich einzuschließen importiere { DragDropContext, Droppable, Draggable } aus „react-beautiful-dnd“; Klasse App erweitert React.Component { // ... rendern() { zurückkehren ( <DragDropContext onDragStart={this.onDragStart} onDragUpdate={this.onDragUpdate} onDragEnd={this.onDragEnd} > <Abwerfbar, abwerfbareId="abwerfbar-1"> {(bereitgestellt, Schnappschuss) => ( <div ref={bereitgestellt.innerRef} Stil = {{ Hintergrundfarbe: Snapshot.isDraggingOver? 'blau': 'grau'}} {...bereitgestellt.droppableProps} > <Ziehbar draggableId="draggable-1" index={0}> {(bereitgestellt, Schnappschuss) => ( <div ref={bereitgestellt.innerRef} {...bereitgestellt.draggableProps} {...bereitgestellt.dragHandleProps} > <h4>Mein verschiebbares Objekt</h4> </div> )} </Ziehbar> {bereitgestellt.Platzhalter} </div> )} </Abwerfbar> </DragDropContext> ); } }
Wenn das Ziehen beendet ist, ändern Sie die Quelldaten onDragEnd = Ergebnis => { const { Quelle, Ziel, draggableId } = Ergebnis; wenn (!Ziel) { zurückkehren; } // Quell- und Zielarrays ändern, das gezogene Element aus dem Quellarray löschen und in das Zielarray einfügen this.setState({ xxx: xxx, }); } Bei der Nutzung aufgetretene Probleme Fügen Sie dem Drag-Zielbereich einen benutzerdefinierten Platzhalter hinzu Wenn react-beautiful-dnd in den Zielbereich gezogen wird, wird zwischen den Elementen im Zielbereich für das aktuelle Drag-Element automatisch ein Leerzeichen gelassen. Der Abstand dieses Leerzeichens entspricht der Größe des Draggable-Elements im Zielbereich (schließt jedoch nicht den Rand des Elements ein, was ebenfalls eine Falle darstellt. Die Lösung wird weiter unten erläutert). Daher können Sie innerhalb dieser Entfernung die absolute Positionierung verwenden und einen benutzerdefinierten Platzhalter hinzufügen. Spezifischer Ansatz: Berechnen Sie den linken und oberen Abstand des aktuellen benutzerdefinierten Platzhalterelements und aktualisieren Sie diese beiden Abstände im DragUpdate-Ereignis. Weitere Informationen finden Sie unter beatiful-dnd-custom-placeholder-demo Beim Ziehen führt das Ändern der Transform-Eigenschaft des gezogenen Elements dazu, dass das Ziehen irgendwo hängen bleibt und das gezogene Element an der falschen Position platziert wird In der offiziellen Dokumentation gibt es eine Beschreibung, die grob besagt, dass das verschiebbare Element die Position „feste Positionierung“ verwendet, aber durch die Transformation beeinflusst wird.
Die folgende Lösung wird bereitgestellt: Verwenden Sie createPortal, um das Drag-Element an ein leeres übergeordnetes Element anzuhängen. Bitte beachten Sie das Problem: Transformieren auf übergeordnetes Element bringt Drag-Positionierung durcheinander Aber diese Methode löst mein Problem nicht, da immer noch ein benutzerdefinierter Platzhalter erforderlich ist. Beim Ziehen muss auch der linke Abstand des Platzhalters berechnet werden, was bedeutet, dass die untergeordneten Elemente unter dem übergeordneten Knoten des aktuell gezogenen Elements abgerufen werden müssen. Wenn createPortal verwendet wird, kann der ursprüngliche übergeordnete Knoten des gezogenen Elements nicht abgerufen werden, sodass die createPortal-Lösung verworfen wird. Der Effekt von „Transform: Scale“ wird durch die Änderung von Breite und Höhe erreicht. Um ein Element auf einem Mobilgerät zu ziehen, müssen Sie lange darauf drücken. In der offiziellen Dokumentation heißt es, dass in mobilen Szenarien bei Fingeroperationen auf ziehbaren Elementen nicht festgestellt werden kann, ob es sich um Tippen, kräftiges Drücken oder Scrollen handelt. Sie müssen daher lange auf das Element drücken, um festzustellen, ob es sich um ein Ziehen handelt.
Wenn Sie ein Element ziehen und es an der Zielposition schweben lassen, ist der Abstand des frei gewordenen Einfügebereichs ungenau. Dies ist das oben erwähnte Problem. Der freie Abstand des Platzhalters zwischen Draggables ist der Abstand eines Draggables, schließt jedoch nicht den Rand des Dragglables ein. Bitte beachten Sie dieses Problem. Schließlich wird die Polsterung verwendet, um den Abstand zwischen Draggables zu steuern, sodass der beim Ziehen frei gewordene Raum die Polsterung umfasst. Zusammenfassen react-beautiful-dnd ist relativ einfach zu verwenden. Im März 2021 wurde v13.1.0 veröffentlicht und ist relativ aktiv. Ich hoffe, die oben genannten Fallstricke werden für alle hilfreich sein. Verweise Offizielle Website beautiful-dnd Dies ist das Ende dieses Artikels über die Verwendung von react-beautiful-dnd zum Implementieren von Drag & Drop zwischen Listen. Weitere relevante Drag & Drop-Inhalte zu React-Listen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Tutorial zur Oracle-Bereitstellung in einer Linux-Umgebung
>>: Programme zum Abfragen und Löschen der Portnutzung im Windows-Betriebssystem
1. Einleitung Warum brauchen wir Indizes? In allg...
So erhalten Sie SQL-Anweisungen mit Leistungsprob...
Im vorherigen Artikel wurde ein ausführliches Bei...
Vor kurzem wollte ich natives JS verwenden, um ei...
MySQL hatte zuvor einen Abfragecache, Query Cache...
Sondersymbole Benannte Entitäten Dezimalkodierung...
Derzeit haben die Verantwortlichen von Layui die ...
1. Projektstruktur 2. Rufen Sie Tomcat.java auf P...
Ergebnisse erzielen Implementierungscode html <...
In diesem Artikel werden die Eigenschaften von CS...
Inhaltsverzeichnis DOM-Verarbeitung Arrays Verfah...
Verwenden von c3p0 Importieren Sie das c3p0jar-Pa...
Priorität Der Grund, warum das Platzieren derselb...
Als ich ein WeChat-Applet-Projekt schrieb, gab es...
In diesem Artikel werden die pessimistische und d...