我有这段反应原生代码:
import React,{ Component } from 'react'; import { AppRegistry,StyleSheet,Toolbarandroid,ListView,Text,View } from 'react-native'; let styles = require('./styles/styles'); class Sunshine extends Component { constructor(props) { super(props); this.state = {isLoading: true,jsonData: ''} } componentDidMount() { this.setState({jsonData: this.getMoviesFromApiAsync()}) } render() { if(this.state.isLoading != true) { return ( <View style={styles.container}> <Toolbarandroid style={styles.basetoolbar} logo={require('./ic_launcher.png')} title="Sunshine" titleTextColor="red"/> <View style={styles.viewcontainer}> <Text>{this.state.jsonData.city.id}</Text> <ListView dataSource={this.state.jsonData.list} renderRow={(rowData) => <Text>{rowData.dt}</Text>} /> </View> </View> ); } else { return ( <View style={styles.container}> <Toolbarandroid style={styles.basetoolbar} logo={require('./ic_launcher.png')} title="Sunshine" titleTextColor="red"/> <View style={styles.singleviewcontainer}> <Text>Loading...</Text> </View> </View> ); } } getMoviesFromApiAsync() { return fetch('http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=14&APPID=18dcba27e5bca83fe4ec6b8fbeed7827') .then((response) => response.json()) .then((responseJson) => { this.setState({isLoading: false,jsonData: responseJson}); console.log(responseJson); return responseJson; }) .catch((error) => { console.error(error); }); } } AppRegistry.registerComponent('Sunshine',() => Sunshine);
我认为应该发生的是,当答案从服务器到达时,列表中会填充结果.但这不是正在发生的事情. Intsead我收到此错误:
undefined is not an object (evaluating 'allRowIDs.length')
那么我到底做错了什么呢?
解决方法
您必须使用数据列表创建ListViewDataSource.
constructor (props) { super(props) this.dataSource = new ListView.DataSource({ rowHasChanged: (r1,r2) => r1 !== r2 }) } componentDidMount () { // You don't need to assign the return value to the state this.getMoviesFromApiAsync() } render () { // Use the dataSource const rows = this.dataSource.cloneWithRows(this.state.jsonData.list || []) ... return ( ... <ListView dataSource={rows} /> ) }
完整文档here.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。