2017-05-18 5 views
0

Mein Code besteht aus einer übergeordneten Komponente (Zeigen) und einer untergeordneten (bearbeitbaren) Komponente. Übergeordnetes Element enthält ein Array, in das untergeordnete Elemente verschoben werden. Ich füge einen Screenshot zur besseren Übersicht hinzu.JS Spleiß funktioniert nicht richtig zum Entfernen React Component

enter image description here

Ich bin ein Kind versucht, (ein Array-Element) unter Verwendung von splice() entfernen. Ich bin immer das Array korrekte Ausgabe auf Spleißen. Beispiel wie im Screenshot Wenn ich "neu" aus dem Array lösche mein Array arr = [dat2, dat3] aber im Frontend wird das letzte Element gelöscht und es wird dat2 angezeigt, neu in der unten gezeigten Weise. Beim Klicken auf Änderungen vornehmen Ich bekomme dat2 und dat3 nach Bedarf. Ich habe Spleißen mit dem richtigen Index gemacht, aber es scheint nicht richtig in der Benutzeroberfläche zu funktionieren.

Bitte helfen. Ich habe fast alles ausprobiert :(

Ich bin nur die Funktionen Weiterleitung erforderlich

Eltern-Code:.

handleMinus(id,idShow){ 

    this.state.Example=this.props.result.examples 
    this.state.Example.splice(id,1); 
    this.props.result.examples=this.state.Example; 
    this.setState({create:!this.state.create}) 


}; 

    render() { 
    var showExm = this.props.result.examples.map(function(result,index){ 
      console.log("EditableIntents") 
      return <div key={index}><EditableIntents 
            handleMinus={that.handleMinus} 
            result={result} 
            indexEg={index} 
            indexShowInt={that.props.index} 
            editExample={that.editExample}/> 
          </div> 
      }); 
    return({showExm}); 
} 

Kind:

render() { 
    return(
     <div> 
     <TextField 
       defaultValue={this.props.result} 
       hintText={this.props.result} 
       onChange= {this.changeEg} 
       id="editText" 
      /> 
      <span><IconButton id={"aa"+1} onClick={this.handleMinus} iconStyle={{width: 72, height: 72, float: -60}}><span><MinusIcon /> </span></IconButton></span> 
      </div> 
     ) 
    } 

handleMinus(){ 
    console.log(this.props.indexEg); 
    console.log("in Grand child:",this.props.result,this.props.indexEg); 
    this.props.handleMinus(this.props.indexEg,this.props.indexShowInt) 
    } 
+0

Sie müssen Ihren Kindern eindeutige und dauerhafte Schlüssel hinzufügen, damit die Reaktion richtig abgleichen kann. –

+0

Ich habe beim Erstellen von EditableIntents einen Schlüssel hinzugefügt (key = {index}) – shinite

+0

Da React Components auf reinen Funktionen basieren, sollten Sie 'splice' niemals verwenden, da der Status direkt mutiert. Verwenden Sie stattdessen "slice" und ersetzen Sie den neuen Teil des Slice-Status durch die Methode "setState". –

Antwort

0

Es wird Problem mit Ihrem Index sein kann,

Kind:

render() { 

    return(
     <div> 
     <TextField 
       defaultValue={this.props.result} 
       hintText={this.props.result} 
       onChange= {this.changeEg} 
       id="editText" 
      /> 

/* I have just changed here your onClick function */ 

      <span><IconButton id={"aa"+1} onClick={() => this.handleMinus(index)} iconStyle={{width: 72, height: 72, float: -60}}><span><MinusIcon /> </span></IconButton></span> 


      </div> 
     ) 

    } 

/*and here I have added parameter */ 

handleMinus(keyid){ 
    console.log(this.props.indexEg); 
    console.log("in Grand child:",this.props.result,this.props.indexEg); 
    this.props.handleMinus(keyid,this.props.indexShowInt) 
    } 

Also you should define "this.state.Example" as array 

handleMinus(id,idShow){ 

this.state.Example = []; 

    this.state.Example=this.props.result.examples 
    this.state.Example.splice(id,1); 
    this.props.result.examples=this.state.Example; 
    this.setState({create:!this.state.create}) 
}; 

Es kann Ihnen helfen.

+0

Ich habe versucht, aber es hilft nicht. Ich bekomme das gleiche Ergebnis, Falsches Ergebnis auf der Benutzeroberfläche. Auch bei onClick = {() => this.handleMinus (index)} Du hast onClick = {() => this.handleMinus (this.props.indexEg)} richtig? – shinite

+0

ja könnte es dir helfen –

+0

Aber ich bekomme nicht das richtige Ergebnis. – shinite

Verwandte Themen