2016-07-14 5 views
0

Ich benutze React Native (0.29.0) auf Android und eine ListView-Komponente auf meiner Seite. Ich möchte in der Lage sein, Elemente aus der Liste zu entfernen.Ich bin ziemlich neu zu reagieren native. HierReact native: Löschen des richtigen Elements aus ListView.

ist die Listview-Komponente:

<ListView 
    key = {items} //An array of strings(same as the datasource) 
    dataSource = {this.state.datasource} 
    renderRow = {(rowData, sectionID, rowID) => <Item data={rowData} onPress={this.deleteItem}/>} 
/> 

Hier ist die Methode, um ein Element zu löschen:

deleteItem(rowData, sectionID, rowID) 
{ 
    //items.splice(rowID ,1); 
    this.setState({datasource: ds.cloneWithRows(items)}); 
} 

Versuchte rowID mit einem Element zu löschen, löscht er das erste Element aus der Liste aus und Die Liste wird erneut gerendert. Verwendet console.warn, um zu überprüfen, was in rowID war, sagt es ist "undefined".

Ich lese mehrere ähnliche Fragen online und sie sagten, dass ich einen Schlüssel verwenden muss, ich bin mir nicht ganz sicher, wie man einen Schlüssel verwendet.Tried Übergabe der Schlüssel an die deleteItem Methode, wieder sagt es Schlüssel " undefined "

Ich finde es schwierig zu identifizieren, welche Zeile aus der DeleteItem-Methode gelöscht werden muss. Es wird wirklich hilfreich sein, wenn jemand mich auf dem richtigen Weg führen kann, Vielen Dank im Voraus.

Antwort

0

Sie müssen die Argumente an Ihre onPress-Methode übergeben. Wenn Sie onPress für ein Element verwenden, hat dieses Element keine Ahnung, ob es auf einer Liste steht oder nicht. Daher kann die Komponente keine Daten über ihren Standort in einer Liste weitergeben.

Sie tun müssen:

renderRow = {(rowData, sectionID, rowID) => <Item data={rowData} onPress={() => this.deleteItem(rowData, sectionID, rowID)}/>} 

() => erzeugt eine Funktion, so dass, wenn onPress es nennen genannt wird this.deleteItem (rowData, sectionid, rowID)

+0

Thank you so viel, Es behebt mein Problem, ich wusste nicht, dass ich eine Methode mit() => erstellen musste, um Argumente zu übergeben. – Ajith

+0

Kein Problem, ja Sie müssen das tun. Weil ansonsten deleteItem-Methode nicht mit irgendwelchen Argumenten aufgerufen würde. Die onPress gehört zu Ihrer Komponente, die nichts mit der Listenansicht zu tun hat. – Jakkra

Verwandte Themen