我正在尝试从db-models获取到ListView。这是我的代码:
export default class todoDB extends Component {
constructor(props) {
super(props);
this.state = {
dataSource : new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2})
};
}
componentDidMount () {
this.fetchData();
}
fetchData () {
DB.users.get_all(function(result) {
let data = [];
for(let i = 1; i <= result.totalrows; i++) {
data.push(result.rows[i]);
}
this.setState({
dataSource: dataSource.cloneWithRows(data),
})
});
}
render () {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderList}
/>
);
}
renderList (item) {
return (
<View>
<Text>{item.age}</Text>
</View>
);
}};
跑步后我没有错误或任何输出,只有空屏幕。 我用
答案 0 :(得分:3)
我没有测试过,但你可以尝试一下:
fetchData() {
DB.users.get_all((result) => {
let data = [];
for (let i = 1; i <= result.totalrows; i++) {
data.push(result.rows[i]);
}
this.setState((prevState) => (
{
dataSource: prevState.dataSource.cloneWithRows(data)
}));
});
}
更改是:使用箭头功能代替function(result)
来保持this
的范围并更新以前的状态prevState.dataSource.cloneWithRows(data)
(在代码dataSource
中未定义)< / p>
至于为何使用prevState
,它是为了保持不变性。这里有更多信息:https://facebook.github.io/react/docs/react-component.html#setstate