这是App.js
import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View } from 'react-native';
import MovieList from './MovieList';
export default class App extends Component {
render() {
return (
<View style={styles.container}>
<MovieList />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
}
});
这是MoveList.js
import React, { Component } from 'react';
import { Platform, StyleSheet, FlatList, ActivityIndicator, Text, View } from 'react-native';
export default class MovieList extends Component {
constructor(props){
super(props);
this.state ={ isLoading: true}
}
componentDidMount() {
console.log("componentDidMount")
return fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
// console.log("responseJson: " + JSON.stringify(responseJson))
this.setState({
isLoading: false,
dataSource: responseJson.movies,
}, function(){
});
})
.catch((error) =>{
console.error(error);
});
}
render(){
if(this.state.isLoading){
return(
<View style={{flex: 1, padding: 20}}>
<ActivityIndicator/>
</View>
)
}
return(
<View style={styles.container}>
<FlatList
data={this.state.dataSource}
renderItem={({item}) => <Text>{item.title}, {item.releaseYear}</Text>}
keyExtractor={({id}, index) => id}
/>
<MovieList name='Valeera' />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
}
});
用于下载电影的代码来自官方入门指南networking,唯一的区别是我将代码放入了一个名为MovieList的新js文件中,并将其作为App.js中的一个组件包含了< / p>
使用上面的代码,componentDidMount被称为不停,并无限期地打印电影列表,最终应用程序将崩溃。
componentDidMount是否应该只被调用一次?是什么导致它被无限期调用?我在上面的代码中做错了什么?
答案 0 :(得分:2)
您正在将组件octokit.repos.listTopics({owner: 'someUsername', repo:
output[output.length-1].name})
.then((repository) => {console.log(repository.data.names)})
嵌入到组件本身的渲染方法中。这造成了无限循环。也许您只需要在FlatList看起来完整的情况下将其删除即可。