react-beautiful-dnd implementiert die Drag-and-Drop-Funktion für Komponenten

react-beautiful-dnd implementiert die Drag-and-Drop-Funktion für Komponenten

Eine schöne, portable Drag-and-Drop-Listenbibliothek für React.js. Weitere Informationen zu den Funktionen von react-beautiful-dnd und den entsprechenden Benutzern finden Sie in der offiziellen Dokumentation und in der chinesischen Übersetzungsdokumentation.

npm: https://www.npmjs.com/package/react-beautiful-dnd

1. Installation

​ Es ist so einfach, den folgenden Befehl in einem bestehenden React-Projekt auszuführen.

# Garn
Garn hinzufügen reagieren-schön-dnd
 
# npm
npm installiere react-beautiful-dnd --save

2.API

Weitere Einzelheiten finden Sie in der offiziellen Dokumentation.

3. Reagiere-schön-dnd-Demo

3.1 Demo1 Vertikales Ziehen von Komponenten

Die Wirkung ist wie folgt:

demo1.gif

Implementierungscode:

importiere React, {Komponente} von „react“;
importiere { DragDropContext, Droppable, Draggable } aus „react-beautiful-dnd“;
 
//Daten initialisieren const getItems = count =>
  Array.from({ Länge: Anzahl }, (v, k) => k).map(k => ({
    ID: `item-${k + 1}`,
    Inhalt: `Dies ist Inhalt ${k + 1}`
  }));
 
// Array-Reihenfolge neu aufzeichnen const reorder = (list, startIndex, endIndex) => {
  const Ergebnis = Array.from(Liste);
 
  const [entfernt] = result.splice(startIndex, 1);
 
  result.splice(endIndex, 0, entfernt);
  Ergebnis zurückgeben;
};
 
konstantes Raster = 8;
 
// Stil festlegen const getItemStyle = (isDragging, draggableStyle) => ({
  // einige grundlegende Stile, um die Elemente ein bisschen schöner aussehen zu lassen
  Benutzerauswahl: "keine",
  Polsterung: Gitter * 2,
  Rand: `0 0 ${grid}px 0`,
 
  // Hintergrund ändert sich beim Ziehen background: isDragging ? "lightgreen" : "#ffffff",
 
  // Stile, die wir auf Draggables anwenden müssen
  … ziehbarer Stil
});
 
const getListStyle = () => ({
  Hintergrund: 'schwarz',
  Polsterung: Gitter,
  Breite: 250
});
 
 
 
exportiere Standardklasse ReactBeautifulDnd erweitert Komponente {
  Konstruktor(Requisiten) {
    super(Requisiten);
    dieser.Zustand = {
      Artikel: getItems(11)
    };
    dies.onDragEnd = dies.onDragEnd.bind(dies);
  }
 
  onDragEnd(Ergebnis) {
    wenn (!Ergebnis.Ziel) {
      zurückkehren;
    }
 
    const items = neu anordnen(
      dieser.Status.Artikel,
      Ergebnis.Quelle.Index,
      Ergebnis.Ziel.Index
    );
 
    dies.setState({
      Artikel
    });
  }
 
 
  rendern() {
    zurückkehren (
      <DragDropContext onDragEnd={this.onDragEnd}>
        <Mitte>
          <Abwerfbar, abwerfbareId="abwerfbar">
            {(bereitgestellt, Schnappschuss) => (
              <div
              //Das gleiche Element, auf das provided.droppableProps angewendet wird.
                {...bereitgestellt.droppableProps}
                // Damit Droppable ordnungsgemäß funktioniert, muss es an den höchstmöglichen bereitgestellten DOM-Knoten gebunden sein. innerRef.
                ref={bereitgestellt.innerRef}
                Stil = {getListStyle (Schnappschuss)}
              >
                {this.state.items.map((item, index) => (
                  <Ziehbar Schlüssel={item.id} draggableId={item.id} index={index}>
                    {(bereitgestellt, Schnappschuss) => (
                      <div
                        ref={bereitgestellt.innerRef}
                        {...bereitgestellt.draggableProps}
                        {...bereitgestellt.dragHandleProps}
                        Stil = {getItemStyle (
                          snapshot.isDragging,
                          bereitgestellt.draggableProps.style
                        )}
                      >
                        {item.content}
                      </div>
                    )}
                  </Ziehbar>
                ))}
                {bereitgestellt.Platzhalter}
              </div>
            )}
          </Abwerfbar>
        </center>
      </DragDropContext>
    );
  }
}

3.2 Demo2 Horizontales Ziehen

Die Wirkung ist wie folgt:

demo2.gif

Implementierungscode: Tatsächlich ähnelt es dem vertikalen Ziehen. Droppable fügt ein zusätzliches Attribut für die Reihenfolge der Anordnung hinzu: direction="horizontal"

importiere React, {Komponente} von „react“;
importiere { DragDropContext, Droppable, Draggable } aus „react-beautiful-dnd“;
 
 
const getItems = Anzahl => (
  Array.from({ Länge: Anzahl }, (v, k) => k).map(k => ({
    ID: `item-${k + 1}`,
    Inhalt: `Dies ist Inhalt ${k + 1}`
  }))
)
 
// Array-Reihenfolge neu aufzeichnen const reorder = (list, startIndex, endIndex) => {
  const Ergebnis = Array.from(Liste);
  //Löschen und die gelöschten Elemente aufzeichnen const [removed] = result.splice(startIndex, 1);
  //Die ursprünglichen Elemente dem Array hinzufügen result.splice(endIndex, 0, removed);
  Ergebnis zurückgeben;
};
 
konstantes Raster = 8;
 
 
// Stil festlegen const getItemStyle = (isDragging, draggableStyle) => ({
  // einige grundlegende Stile, um die Elemente ein bisschen schöner aussehen zu lassen
  Benutzerauswahl: "keine",
  Polsterung: Gitter * 2,
  Rand: `0 ${grid}px 0 0 `,
 
  // Hintergrund ändert sich beim Ziehen background: isDragging ? "lightgreen" : "#ffffff",
 
  // Stile, die wir auf Draggables anwenden müssen
  … ziehbarer Stil
});
 
const getListStyle = () => ({
  Hintergrund: 'schwarz',
  Anzeige: 'flex',
  Polsterung: Gitter,
  Überlauf: „auto“,
});
 
 
Klasse ReactBeautifulDndHorizontal erweitert Komponente {
  Konstruktor(Requisiten) {
    super(Requisiten);
    dieser.Zustand = {
      Artikel: getItems(10)
    };
    dies.onDragEnd = dies.onDragEnd.bind(dies);
  }
 
  onDragEnd(Ergebnis) {
    wenn (!Ergebnis.Ziel) {
      zurückkehren;
    }
 
    const items = neu anordnen(
      dieser.Zustand.Artikel,
      Ergebnis.Quelle.Index,
      Ergebnis.Ziel.Index
    );
 
    dies.setState({
      Artikel
    });
  }
 
  rendern() {
    zurückkehren (
      <DragDropContext onDragEnd={this.onDragEnd}>
        <Droppable droppableId="abwerfbar" Richtung="horizontal">
          {(bereitgestellt, Schnappschuss) => (
            <div
              {...bereitgestellt.droppableProps}
              ref={bereitgestellt.innerRef}
              Stil = {getListStyle (Snapshot.isDraggingOver)}
            >
              {this.state.items.map((item, index) => (
                <Ziehbar Schlüssel={item.id} draggableId={item.id} index={index}>
                  {(bereitgestellt, Schnappschuss) => (
                    <div
                      ref={bereitgestellt.innerRef}
                      {...bereitgestellt.draggableProps}
                      {...bereitgestellt.dragHandleProps}
                      Stil = {getItemStyle (
                        snapshot.isDragging,
                        bereitgestellt.draggableProps.style
                      )}
                    >
                      {item.content}
                    </div>
                  )}
                </Ziehbar>
              ))}
              {bereitgestellt.Platzhalter}
            </div>
          )}
        </Abwerfbar>
      </DragDropContext>
    )
  }
}
 
Standard exportieren ReactBeautifulDndHorizontal

3.3 Demo3 implementiert das Ziehen eines Aufgabenelements (vertikales und horizontales Ziehen)

demo3.gif

Die Implementierungsprinzipien sind tatsächlich ähnlich. Der Code wird organisiert und auf GitHub platziert. Adresse: github

4. Gefühl

Zurzeit habe ich einfach react-beautiful-dnd verwendet und der Einstieg erscheint sehr einfach und die API ist nicht kompliziert. Auch die Leistung ist gut (Demo2 hat mehr als 170 Aufgaben gerendert. Das Ziehen ist immer noch flüssig wie Seide). Eventuelle Mängel werde ich künftig kennzeichnen.

Dies ist das Ende dieses Artikels über Drag & Drop der React-Beautiful-DND-Komponente. Weitere relevante Inhalte zu Drag & Drop der React-Beautiful-DND-Komponente finden Sie in früheren Artikeln auf 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:
  • Detaillierte Erklärung des verschiebbaren und bearbeitbaren Gantt-Diagramms (Highcharts können für Vue und React verwendet werden)
  • Typescript+React zum Erzielen einfacher Drag-and-Drop-Effekte auf Mobilgeräten und PCs
  • Verwenden von react-beautiful-dnd zum Implementieren von Drag & Drop zwischen Listen
  • Mehr als 100 Zeilen Code zur Implementierung von React Drag Hooks
  • React.js-Komponente implementiert Drag & Drop-Sortierkomponentenfunktionsprozessanalyse
  • Reagieren Sie mit Beispielcode zur Implementierung der Drag & Drop-Funktion
  • React.js-Komponente implementiert Drag-and-Drop-Kopie und sortierbaren Beispielcode
  • Lassen Sie uns noch einmal über eine Reihe von Problemen sprechen, die durch die Implementierung nativer JS-Drag-Effekte in React.js verursacht werden
  • Gedanken zur Implementierung nativer JS-Drag-Effekte basierend auf React.js
  • React implementiert einfache Drag & Drop-Funktion

<<:  Detaillierte Erklärung des mysqlslap-Befehls und der Syntax für den integrierten Stresstest in MySQL 5.7

>>:  So fügen Sie einem Feld in MySQL eine Standardzeit hinzu

Artikel empfehlen

So implementieren Sie ein Hover-Dropdown-Menü mit CSS

Wie üblich werde ich heute über einen sehr prakti...

Installationsprozess von CentOS8 Linux 8.0.1905 (Abbildung)

Die aktuellste Version von CentOS ist CentOS 8. A...

Wie überwacht und erhält Zabbix Netzwerkgerätedaten über SSH?

Szenariosimulation: Das Betriebs- und Wartungsper...

Einstellungen für den Ubuntu-Boot-Autostart-Dienst

So erstellen Sie einen Dienst und starten ihn aut...

Detaillierte Einführung in die Mysql-Datumsabfrage

Abfrage des aktuellen Datums AKTUELLES DATUM AUSW...

Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt

Ergebnisse erzielen Implementierungscode html <...

So installieren Sie den Kibana-Tokenizer im Docker-Container

Schritt: 1. Erstellen Sie eine neue Datei docker-...

Implementierung des Aufbaus eines Kubernetes-Clusters mit VirtualBox+Ubuntu16

Inhaltsverzeichnis Über Kubernetes Grundlegende U...

Einführung in HTML für Frontend-Entwickler

1 Einführung in HTML 1.1 Erste Erfahrungen mit Co...

Spezifische Verwendung des Linux-gcc-Befehls

01. Befehlsübersicht Der Befehl gcc verwendet den...