React Native Sqlite 获取Listview中的所有数据

IT技术 javascript reactjs typescript react-native
2021-05-22 06:53:53

我正在使用这个库:https : //github.com/andpor/react-native-sqlite-storage用于我的本机项目。

我像这样从数据库中检索单行:

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>
    )

但现在我想从数据库中获取所有数据,告诉我我在下面的代码中做错了什么:

 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>
        )

谁能指导我如何在列表视图中显示数据库数据。

2个回答

FlatList 数据的状态值应该是一个数组,并且每次迭代时都将其设置为单个字符串。

尝试像下面那样改变它

this.setState((prevState) => ({ record : prevState.record.push(row.name)}))

PS:您需要将初始状态值设置record为空数组左右。

它是这样工作的

record = this.state.record.slice()
                record.push(row.name)
                this.setState({ record: record })