Native ListView reagieren: Zeilen werden nicht neu gerendert, nachdem sich der Datenquellenstatus geändert hat.Reactive Native ListView-Zeile wird nach Statusänderung nicht erneut gerendert
Hier ist eine vereinfachte Version von meinem Code:
render(): {
return <ListView
dataSource={this.state.DS}
renderRow={this.renderRow}/>
}
renderRow(item): {
return <TouchableOpacity onPress={() => this.handlePress(item)}>
{this.renderButton(item.prop1)}
</TouchableOpacity>
}
renderButton(prop1): {
if (prop1 == true) {
return <Text> Active </Text>
} else {
return <Text> Inactive </Text>
}
}
handlePress(item): {
**Change the prop1 of *item* in an array (clone of dataSource), then**
this.setState({
DS: this.state.DS.cloneWithRows(arrayFromAbove)
})
}
Nach Facebook Beispiel wird Listview soll jede Datenquelle geändert wird rerender. Liegt es daran, dass ich nur eine Eigenschaft eines Elements in der Datenquelle ändere? Es scheint, als ob die renderRow-Funktion nicht erneut gerendert wird, sondern die render() -Funktion aus einer Datenquellenänderung stammt.
Vielen Dank.
Danke für die Anregung/example lesen! Ich habe das in meinem Projekt definitiv genauso gemacht. Ich glaube, das Problem ist, dass ListView eine Zeile nicht erneut rendert, wenn die Datenquelle ein Array von Objekten ist und nur eine Eigenschaft eines Objekts geändert wird. Die Konsole sagt mir, dass sich die Eigenschaft eines Objekts in der Datenquelle tatsächlich geändert hat, aber ListView erkennt sie und gibt die geänderte Zeile nicht erneut aus. Haben Sie eine mögliche Abhilfe dafür? – skleest
Es wird neu gerendert, wenn Sie this.setState aufrufen. Können Sie das Problem hier kopieren: https://rnplay.org/apps/Dw08-g. –
Definitiv ist es hier dupliziert (https://rnplay.org/apps/1-sNcQ). Scheint so, als würde sich die Datenquelle ändern, aber die renderRow-Funktion läuft nicht. Vielen Dank. – skleest