javascript - React Native Sqlite Listview'da tüm verileri çek
React Native projem için bu kütüphaneyi kullanıyorum: https://github.com/andpor/react-native-sqlite-storage
Veritabanından tek bir satırı şöyle alıyorum:
db.transaction((tx) => {
tx.executeSql('SELECT * FROM user where id = 1', [], (tx, results) => {
console.log("Query completed");
var len = results.rows.length;
if (len > 0) {
let row = results.rows.item(0);
this.setState({userName: row.name});
}
});
});
return (
<View>
<Text>{this.state.userName}</Text>
</View>
)
Ama şimdi veritabanından tüm verileri almak istiyorum, aşağıdaki kodda ne yanlış yaptığımı bana söyle:
db.transaction((tx) => {
tx.executeSql('SELECT * FROM user', [], (tx, results) => {
console.log("Query completed");
var len = results.rows.length;
for (let i = 0; i < len; i++) {
let row = results.rows.item(i);
this.setState({record: row.name});
}
});
});
return (
<View>
<FlatList data={this.state.record}
keyExtractor={(x,i) => 1}
renderItem={ ({item}) =>
<ListItem><Text>{item.name}</Text></ListItem>
}
/>
</View>
)
Biri bana veritabanı verilerini ListView'da nasıl gösterebileceğimi gösterebilir mi?
Cevap #1
FlatList verisi için durum değeriniz bir dizi olmalıdır ve her yinelediğinizde onu tek bir dizeye ayarlıyorsunuz.
Aşağıdaki gibi değiştirmeyi deneyin
this.setState((prevState) => ({ record : prevState.record.push(row.name)}))
Not: Başlangıç durumu değerinizi record için boş bir dizi olarak ayarlamanız gerekiyor veya benzeri şekilde.
Cevap #2
Şöyle çalışır
record = this.state.record.slice()
record.push(row.name)
this.setState({ record: record })
