gpt4 book ai didi

android - react native ListView : cannot read property of undefined

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:38 25 4
gpt4 key购买 nike

我正在使用 SQLite 作为设备的数据库。我想基本上实现的是:

1- 让用户能够为他最喜欢的“数据”加注星标

2- 一旦数据保存在数据库中,在另一个页面中检索它并将它们插入到 listView 中,供用户随时查看。

但无论我怎么尝试,我总是会遇到同样的错误。

无法读取未定义的属性。

代码:

import React, { Component } from 'react'
import {
View,
Text,
ListView
} from 'react-native'
var SQLite = require('react-native-sqlite-storage')
var db = SQLite.openDatabase({ name: "RHPC.db", location: "default"})
var obj;

class Schedules extends Component {
constructor(props) {
super(props)

const ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});

this.state = {
datasource: []
}

db.transaction((tx) => {
tx.executeSql("SELECT * FROM schedules", [], (tx, res) => {
let len = res.rows.length;
if(len > 0) {
for(let i = 0; i < len; i++) {
var obj = [{id: res.rows.item(i)["id"], title: res.rows.item(i)["title"]}]
}
this.setState({
datasource: obj
})
} else {
console.log("empty")
}
})
}, (err) => {
console.log("error: " + JSON.stringify(err))
})
}

_renderRow(rowData) {
return(
<View>
<Text key={rowData.id}>
{rowData.title}
</Text>
</View>
)
}

render() {
console.log(this.state.datasource);
return(
<View style={{marginTop: 150}}>
<ListView
dataSource={this.state.datasource}
renderRow={this._renderRow.bind(this)}
/>
</View>
);
}
}


const styles = {

}

export default Schedules;

当我尝试 console.log 数据源状态时:

0: Object
id: 2
title: "Session 1: Transition from Humanitarian Assistance to Rebuilding Health & Health Systems."

所以换句话说,它看起来像是在工作,但不是 100%?因为我在该表中确实有两行,而且它只检索最后一行。这是未定义问题的原因吗?

最佳答案

您以错误的方式使用了 ListView,您在构造函数 (ds) 中创建了新的数据源并且没有将其分配到任何地方,查看文档中的示例:https://facebook.github.io/react-native/docs/listview.html

应该是:

constructor(props) {
super(props)

this.state = {
dataSource: new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}),
}
}

然后在 setState 中做这样的事情:

this.setState({
datasource: this.state.dataSource.cloneWithRows(obj)
})

编辑:

在你的 for 循环中你应该有:

var obj = [];
for(let i = 0; i < len; i++) {
obj.push({id: res.rows.item(i)["id"], title: res.rows.item(i)["title"]});
}

关于android - react native ListView : cannot read property of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com