React implementiert das Hinzufügen, Löschen, Ändern und Abfragen von Todolists

React implementiert das Hinzufügen, Löschen, Ändern und Abfragen von Todolists

Nehmen Sie Todolist als Beispiel

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Das Verzeichnis lautet wie folgt

Bildbeschreibung hier einfügen

app.js

 importiere React, { PureComponent } von 'react'
Eingabe aus „./components/Input“ importieren
Liste aus „./components/List“ importieren
importiere Total aus './components/Total'
Importiere Maske aus „./components/Mask“
importiere { bus als $bus } von './components/bus'
importiere './App.css'
exportiere Standardklasse App erweitert PureComponent {
  Konstruktor() {
    super()
    dieser.Zustand = {
      Flagge: falsch,
      Liste: [
        {
          ID: 1,
          Inhalt: 'Hahaha',
          geprüft: false
        },
        {
          Ich würde: 7,
          Inhalt: 'Hahaha',
          geprüft: false
        },
        {
          ID: 5,
          Inhalt: 'Hahaha',
          geprüft: false
        },
      ],
      checkAll: false,
      Länge auswählen: 0,
      Artikel: {}
    }
  }
  // Alles auswählen oder Auswahl aller abwählen checkAllHandler(checked) {
    console.log("geprüft",geprüft);
    const { list } = dieser.Zustand
    const neueListe = Liste.Map(Element =>{
      returniere {...item,checked}
    })
    dies.setState({Liste:neueListe,checkAll:geprüft},()=>{
      dies.doneLength()
    })
  }
  // Einzelauswahl, Einzelauswahl checkHandler =(id,checked)=> {
    const { list } = dieser.Zustand
    const neueListe = Liste.Map(Element => {
      returniere item.id === ID ? {...item,checked} : Artikel
    })
    let checkAll = neueListe.Länge und neueListe.jedes(Element => Element.geprüft)
    this.setState(() => ({Liste: neueListe,allesprüfen}),()=>{
      dies.doneLength()
    })
  }
  // hinzufügen addHandler = (obj)=>{
    lass { Liste } = diesen.Zustand;
    let neueListe = [...Liste,Objekt]
    console.log('neueListe===='+neueListe)
    dies.setState({
      Liste: neueListe,
    },()=>{
      dies.doneLength()
    })
  } 
  // Suche searchHandler=(content)=>{
    console.log("Inhalt",Inhalt);
    lass { Liste } = diesen.Zustand;
    let newList = Liste.Filter(Element => Element.Inhalt.Includes(Inhalt))
    dies.setState({
      Liste: neueListe
    },()=>{
      dies.doneLength()
    })
  }
  // Löschen delHandler = (id)=> {
    Konsole.log("Ich würde",Ich würde);
    const { list } = dieser.Zustand
    const newList = Liste.Filter(Artikel => Artikel.ID !=ID)
    let checkAll = neueListe.Länge und neueListe.jedes(Element => Element.geprüft)
    this.setState(() => ({Liste: neueListe,allesprüfen}),()=>{
      dies.doneLength()
    })
  }
  // Bearbeiten editHandler = (items)=>{
    dies.setState({
      Artikel: Artikel
    })
  }
  // Update update = (Inhalt)=>{
    const { Liste, Element } = dieser.Zustand
    let obj = Objekt.assign(item,{content})
    const neueListe = Liste.map(v => {
      wenn(v.id === obj.id) {
        v = {...obj}
      }
      zurückgeben v
    })
    dies.setState({
      Liste: neueListe,
      Artikel: obj
    })
  }
  // Abgeschlossen doneLenth=()=> {
    const { list } = dieser.Zustand
    const newList = Liste.Filter(Element => Element.geprüft)
    let selectLength = neueListe.Länge
    setzeTimeout(()=>{
      dies.setState({
        Länge auswählen
      })
    })
  }
  // Komponente einbindenDidMount() {
    this.unSubscribe = $bus.addListener("getFlag",(flag)=>{
      dies.setState({flag})
    })
    this.unSubscribe1 = $bus.addListener("sendValue",(obj)=>{
     this.addHandler(obj)
    })
    this.unSubscribe2 = $bus.addListener("Suchwert",(Wert)=>{
     this.searchHandler(Wert)
    })
    this.unSubscribe3 = $bus.addListener("getItem",(item)=>{
     this.editHandler(Element)
    })
    this.unSubscribe4 = $bus.addListener("update",(content)=>{
     dies.update(Inhalt)
    })
  }
  // Aushängen componentWillUnmount() {
    $bus.removeListener(dieses.abbestellen)
    $bus.removeListener(dieses.unSubscribe1)
    $bus.removeListener(dieses.unSubscribe2)
    $bus.removeListener(dieses.unSubscribe3)
    $bus.removeListener(dieses.unSubscribe4)
  }
  rendern() {
    let { flag, list, checkAll, selectLength } = dieser.Zustand
    zurückkehren (
      <div Klassenname='Container'>
        {/* Eingabefeld*/}
        <Eingabe></Eingabe>
        {/* Liste */}
        <Liste Liste={Liste} checkHandler={dieser.checkHandler} delHandler={dieser.delHandler}></Liste>
        {/* Statistik */}
        <Gesamt checkAllHandler={this.checkAllHandler.bind(this)} checkAll={checkAll} selectLength={selectLength}></Gesamt>
        {/* Popup-Fenster bearbeiten */}
        { Flagge ? <Maske ></Maske> : ''}
      </div>
    )
  }
}

Eingabe.js

importiere React, {Komponente} von 'react'
importiere { bus als $bus } von './bus'
exportiere Standardklasse Input erweitert Komponente {
  Konstruktor() {
    super()
    dieser.Zustand = {
      Wert:""
    }
  }
  changeHandler = (e)=>{
    dies.setState({
      Wert: e.Ziel.Wert
    })
    console.log("dieser.Zustands.Wert",dieser.Zustands.Wert);
  }
  // addHandler hinzufügen = ()=>{
    lass { Wert } = diesen.Zustand;
    lass obj = {
      ID: Date.now(),
      Inhalt: Wert,
      erledigt: falsch
    }
    wenn(Wert) {
      $bus.emit("Sendewert",obj)
    } anders {
      console.log("Bitte eingeben")
    }
  }
  // Suche searchHandler = ()=>{
    console.log("Suche");
    lass { Wert } = diesen.Zustand;
    if(!value) return console.log("Bitte eingeben");
    $bus.emit("Suchwert",Wert)
  }
  rendern() {
    let { value } = dieser.Zustand
    zurückkehren (
      <>
        <div Klassenname="Eingabe">
          <input type="text" value={value} placeholder='Bitte geben Sie Ihren Aufgabennamen ein und drücken Sie zur Bestätigung die Eingabetaste' onInput={this.changeHandler}/>
          <button className="btn btn-success" onClick={this.addHandler}>Hinzufügen</button>
          <button className="btn btn-primary" onClick={this.searchHandler}>Suchen</button>
        </div>
      </>
    )
  }
}

Liste.js

importiere React, {Komponente} von 'react'
Element aus „./Item“ importieren
Importiere PropTypes aus „Prop-Types“
exportiere Standardklasse Liste erweitert Komponente {
  statische Eigenschaftentypen = {
		Liste:PropTypes.array.isRequired,
	}
  rendern() {
    let { Liste, checkHandler, checkAllHandler, delHandler } = this.props;
    console.log("Liste",Liste);
    zurückkehren (
      <ul Klassenname="Aufgabenliste">
        {
          Liste.map(Element => (<Elementelement={Element} Schlüssel={Element.id} checkHandler={checkHandler} checkAllHandler={checkAllHandler} delHandler={delHandler}></Element>))
        }
      </ul>
    )
  }
}

Artikel.js

importiere React, {Komponente} von 'react'
importiere { bus als $bus } von './bus'
exportiere Standardklasse Item erweitert Komponente {
  Konstruktor(Requisiten) {
    super(Requisiten)
    dieser.Zustand = {}
  }
  ÄnderungsHandler = (id)=>{
    let { checkHandler } = diese.props;
    Rückkehr (e)=>{
      checkHandler(id,e.ziel.geprüft)
    }
  }
  entferneHandler(){
    } = this.props;
    delHandler(Argumente[0])
  }
  editHadnler = (Artikel)=>{
    $bus.emit("getFlag",true)
    localStorage.setItem("obj",JSON.stringify(item))
    $bus.emit("getItem",Artikel)
  }
  rendern() {
    } = diese.Eigenschaften;
    zurückkehren (
      <li Klassenname="Aufgabenelement">
        <input type="checkbox" aktiviert={item.checked} beiÄnderung={this.changeHandler(item.id)}/>
        <div Klassenname="Inhalt">
          {item.content}
        </div>
        <button className={`btn btn-success ${!item.checked ? "d-none" : "d-block"}`} onClick={()=> this.editHadnler(item)}>Bearbeiten</button>
        <button className={`btn btn-danger ${!item.checked ? "d-none" : "d-block"}`} onClick={this.removeHandler.bind(this,item.id)}>Löschen</button>
      </li>
    )
  }
}

Gesamt.js

importiere React, {Komponente} von 'react'
exportiere Standardklasse Total erweitert Komponente {
  Konstruktor() {
    super()
    dies.changeAllHandler = dies.changeAllHandler.bind(dies)
  }
  changeAllHandler(e) {
    let { checkAllHandler } = diese.props
    checkAllHandler(e.target.geprüft)
  }
  rendern() {
    let { checkAll,selectLength } = diese.props;
    zurückkehren (
      <div Klassenname="Aufgabe erledigt">
        <input type="checkbox" onChange={this.changeAllHandler} aktiviert={checkAll}/>
        <p>Abgeschlossen<span className="single-number">{selectLength}</span> Alle<span className="all-number">4</span></p>
      </div>
    )
  }
}

Mask.js (Popup-Fenster)

importiere React, {Komponente} von 'react'
importiere { bus als $bus } von './bus'
exportiere Standardklassenmaske erweitert Komponente {
  Konstruktor() {
    super()
    dieser.Zustand = {
      Wert: ''
    }
  }
  closeMask = ()=>{ // Popup-Fenster schließen$bus.emit("getFlag",false)
  }
  updateHandler = ()=>{
    $bus.emit("getFlag",false)
    $bus.emit("aktualisieren",dieser.Zustand.Wert)
  }
  beiÄnderung = (e) => {
    dies.setState({
      Wert: e.Ziel.Wert
    })
  }
  componentDidMount() {
    let obj = JSON.parse(localStorage.getItem("obj"))
    dies.setState({
      Wert: obj.content
    })
  }
  rendern() {
    let { value } = dieser.Zustand
    zurückkehren (
      <div>
        <div Klassenname="mm-Maske" >
        <div Klassenname="mm-modal">
          <div Klassenname="mm-Titel">
            <span className="mm-edit">Bearbeiten</span>
            <span className="mm-close" onClick={this.closeMask}>x</span>
          </div>
          <div Klassenname="mm-Inhalt">
            <input type="text" value={value} placeholder="Aufgabenname" onInput={this.onChange}/>
          </div>
          <div Klassenname="mm-box-btn">
            <div className="mm-update" onClick={this.updateHandler}>Aktualisieren</div>
            <div className="mm-cancel" onClick={this.closeMask}>Abbrechen</div>
          </div>
        </div>
      </div>
      </div>
    )
  }
}

bus.js

 yarn add -D Ereignisse
importiere { EventEmitter } von 'Ereignisse'
export const bus = new EventEmitter() // Businstanz exportieren

App.css

* {
  Rand: 0;
  Polsterung: 0;
}
Eingabe,Schaltfläche {
  Gliederung: keine;
  Rand: 0;
}
ul>li {
  Listenstil: keiner;
}
.container {
  Breite: 400px;
  Höhe: 500px;
  Rand: 10px automatisch automatisch;
  Polsterung: 20px;
  Box-Größe: Rahmenbox;
  Farbe: #3333;
  Rand: 1px durchgezogen;
  Überlauf: versteckt;
}
.Eingabe {
  Breite: 100 %;
  Höhe: 30px;
  Anzeige: Flex;
}
Eingabe {
  Breite: 100 %;
  Höhe: 100%;
  Rand: 1px durchgezogen #e1e1e1;
  Box-Größe: Rahmenbox;
  Rahmenradius: 4px;
  Polsterung: 0 10px;
}
Eingabe::Platzhalter {
  Farbe: #e1e1e1;
}
Eingabe:Fokus {
  Rand: 1px durchgezogen #0096e6;
}
.Aufgabenliste {
  Breite: 100 %;
  Anzeige: Flex;
  Flex-Flow: Spaltenumbruch;
  Rand oben: 10px;
}
.Aufgabenliste li {
  Anzeige: Flex;
  Höhe: 40px;
  Inhalt ausrichten: zentriert;
  Elemente ausrichten: zentrieren;
  Polsterung: 0 10px;
  Hintergrundfarbe: #eef0f4;
  Rand unten: 10px;
  Überlauf: versteckt;
  Textüberlauf: Auslassungspunkte;
  Leerzeichen: Nowrap;
}
.task-list li Eingabe[Typ^="Kontrollkästchen"] {
  Breite: 15px;
  Höhe: 15px;
  Rand: 1px durchgezogen #e1e1e1;
  Cursor: Zeiger;
  Flex-Schrumpfen: 0;
}
.Aufgabenliste li .Inhalt {
  biegen: 1;
  Rand links: 10px;
}
.btn {
  Flex-Schrumpfen: 0;
  Anzeige: Flex;
  Elemente ausrichten: zentrieren;
  Höhe: 30px;
  Inhalt ausrichten: zentriert;
  Polsterung: 5px 10px;
  Textausrichtung: zentriert;
  Cursor: Zeiger;
  Rahmenradius: 4px;
  Farbe: #fff;
  Buchstabenabstand: 2px;
  Rand: 0,5px;
  Box-Größe: Rahmenbox;
  Schriftgröße: 16px;
}
.btn-Erfolg {
  Hintergrundfarbe: #0f0;
}
.btn-Gefahr {
  Hintergrundfarbe: #f00;
}
.btn-primary {
  Hintergrundfarbe: #0096e6;
}
.Aufgabe erledigt {
  Breite: 100 %;
  Höhe: 40px;
  Zeilenhöhe: 40px;
  Anzeige: Flex;
  Elemente ausrichten: zentrieren;
  Hintergrundfarbe: #eef0f4;
  Polsterung links: 10px;
  Box-Größe: Rahmenbox;
  Rand oben: 30px;
}
.task-done Eingabe {
  Breite: 15px;
  Höhe: 15px;
  Rand: 1px durchgezogen #e1e1e1;
  Cursor: Zeiger;
  Flex-Schrumpfen: 0;
  Rand rechts: 10px;
}
.einzelne-Zahl {
  Farbe: #333;
  Rand links: 5px;
}
.alle-Nummer {
  Farbe: rot;
  Rand links: 5px;
}
.mm-Maske{
  Position: fest;
  oben: 0;
  links: 0;
  rechts:0;
  unten: 0;
  Hintergrund: rgba (0,0,0,0,5);
}
.mm-modal{
  Breite: 350px;
  Position: absolut;
  oben: 50 %;
  links: 50 %;
  transformieren: übersetzen(-50 %, -50 %);
  z-Index: 1000;
  Hintergrund:#ffffff;
  Rahmenradius: 4px;
  Farbe: #333333;
}
.mm-Titel {
  Höhe: 50px;
  Zeilenhöhe: 50px;
  Anzeige: Flex;
  Inhalt ausrichten: Abstand dazwischen;
  Rahmen unten: 1px durchgezogen #e1e1e1;
  Boxgröße: Rahmenbox;
  Schriftgröße: 20px;
}
.mm-bearbeiten{
  Texteinzug: 20px;
}
.mm-schließen{
  Rand rechts: 20px;
  Schriftfamilie: Consals;
  Cursor:Zeiger;
}
.mm-Inhalt{
  Polsterung: 0 20px;
  Rand unten: 20px;
}
.mm-Inhaltseingabe{
  Breite: 100 %;
  Höhe: 30px;
  Zeilenhöhe: 30px;
  Texteinzug: 20px;
  Rahmenradius: 4px;
  Rand oben: 20px;
  Rand: 1px durchgezogen #666;
  Boxgröße: Rahmenbox;
}
.mm-content input:hover{
  Rand: 1px durchgezogen #0096e6;
}
.mm-Inhaltseingabe: letztes Kind {
  Texteinzug: 5px;
}
.mm-box-btn{
  Anzeige: Flex;
}
.mm-update,.mm-cancel{
  Breite: 80px;
  Höhe: 30px;
  Zeilenhöhe: 30px;
  Textausrichtung: zentriert;
  Cursor:Zeiger;
  Hintergrund: #0096e6;
  Farbe: #ffffff;
  Benutzerauswahl: keine;
  Rahmenradius: 4px;
  Rand: 0 20px 50px;
}
.mm-update{
  Rand rechts: 10px;
}
.d-keine {
  Anzeige: keine;
}
.d-block {
  Anzeige: Block;
}

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • So implementieren Sie Hinzufügen, Löschen, Ändern und Prüfen Schritt für Schritt in Spring-Boot React
  • JS-Operationsobjekt-Array zum Erreichen von Beispielcode zum Hinzufügen, Löschen, Ändern und Abfragen
  • Detaillierte Erläuterung des dynamischen Hinzufügens, Löschens, Änderns und Abfragens von Eigenschaften bei der Konvertierung von Java-Objekten nach JSON
  • Detaillierte Erklärung gängiger Hinzufügungen, Löschungen, Änderungen und anderer Eigenschaften von JavaScript-Arrays
  • Beispiel für die JS-Implementierung von Array-Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgängen

<<:  Nachteile und sinnvolle Verwendung des MySQL-Datenbankindex

>>:  Was ist eine HTML-Datei? So öffnen Sie eine HTML-Datei

Artikel empfehlen

Umfassende Zusammenfassung der MySQL-Funktionen

Inhaltsverzeichnis 1. Häufig verwendete Zeichenfo...

Zwei Möglichkeiten zum Löschen von Floats in HTML

1. Methode 1 zum Löschen von Floating Legen Sie d...

Eine einfache Erklärung der parallelen MySQL-Replikation

1. Hintergrund der parallelen Replikation Zunächs...

jQuery implementiert ein atmendes Karussell

In diesem Artikel wird der spezifische Code von j...

Schritte und Fallstricke beim Upgrade von Linux MySQL 5.5 auf MySQL 5.7

Inhaltsverzeichnis Linux MySQL 5.5 auf MySQL 5.7 ...

Ein kurzer Vortrag über die Geschichte von React Router

Wenn Sie React Router verstehen möchten, sollten ...

Detaillierte Erklärung der neuen Funktionen von ES9: Asynchrone Iteration

Inhaltsverzeichnis Asynchrones Durchlaufen Asynch...

Fallstudie zum Unterschied zwischen JavaScript parseInt() und Number()

Lernziele: Die beiden Funktionen parseInt() und N...

Detaillierte Schritte zur Dateisteuerungsverwaltung für Linux-Konten

Im Linux-System gibt es neben den verschiedenen, ...