'use strict';
import React, {
AppRegistry,
Component,
StyleSheet,
Text,
View,
Image,
ToastAndroid,
ListView,
} from 'react-native';
var REQUEST_URL = 'https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json';
var movieData=new Array();
class AwesomeProject extends Component {
//返回當前顯示的view
render() {
// ToastAndroid.show(JSON.stringify(this.state.loaded),ToastAndroid.SHORT)
//由于剛開始的的時候設置loaded為false,所以第一次會加載等待的view
if (!this.state.loaded) {
return this.renderLoadingView();
}
return(
<ListView
initiaListSize={1}
onEndReachedThreshold={10}
//設置ListView的數(shù)據(jù)源
dataSource={this.state.dataSource}
//listview的回掉方法
renderRow={this.renderMovie}
//監(jiān)聽滑動到底部的方法 注意ES6的寫法必須要bind要不然this對象不對
onEndReached={this.onLoadeMore.bind(this)}
style={styles.listView}
/>
);
}
onLoadeMore() {
this.fetchData();
}
//加載等待的view
renderLoadingView() {
return (
<View style={styles.container}>
<Text>
Loading movies...
</Text>
</View>
);
}
//獲取到數(shù)據(jù)加載到listview控件上顯示
renderMovie(movie) {
return (
<View style={styles.container}>
<Image
source={{uri: movie.posters.thumbnail}}
style={styles.thumbnail}
/>
<View style={styles.rightContainer}>
<Text style={styles.title}>{movie.title}</Text>
<Text style={styles.year}>{movie.year}</Text>
</View>
</View>
);
}
//js組件的構(gòu)造函數(shù)侨艾,js的生命周期
constructor(props) {
super(props);
//state內(nèi)部維護的一個狀態(tài)沸移,我們剛開始進來的為空,來加載空的view
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
//自己定義的字段標記是否已經(jīng)加載過了
loaded: false,
};
}
//rn的生命周期,初始化的時候會執(zhí)行
componentDidMount() {
//去拉取電影的接口的數(shù)據(jù)
this.fetchData();
}
onResoutData(responseData){
var concat = movieData.concat(responseData.movies);
movieData=concat;
ToastAndroid.show(movieData.length+"",ToastAndroid.SHORT)
this.setState({
//將獲取到的數(shù)據(jù)賦值給dataSource
dataSource: this.state.dataSource.cloneWithRows(movieData),
//標記已經(jīng)加載成功完畢
loaded: true,
});
}
fetchData() {
//這個是js的訪問網(wǎng)絡的方法
fetch(REQUEST_URL)
//ES6的寫法左邊代表輸入的參數(shù)右邊是邏輯處理和返回結(jié)果
.then((response) => response.json())
.then((responseData) => {
this.onResoutData(responseData);
})
}
}
const styles = StyleSheet.create({
title: {
fontSize: 20,
marginBottom: 8,
textAlign: 'center',
},
year: {
textAlign: 'center',
},
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
rightContainer: {
flex: 1,
},
thumbnail: {
width: 53,
height: 81,
},
listView: {
paddingTop: 20,
backgroundColor: '#F5FCFF',
},
});
AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
React Native學習筆記-加載網(wǎng)絡上電影數(shù)據(jù)并且使用listview分批加載.
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門橙困,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞧掺,“玉大人,你說我怎么就攤上這事凡傅”俦罚” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵夏跷,是天一觀的道長上陕。 經(jīng)常有香客問我桩砰,道長,這世上最難降的妖魔是什么释簿? 我笑而不...
- 正文 為了忘掉前任亚隅,我火速辦了婚禮,結(jié)果婚禮上庶溶,老公的妹妹穿的比我還像新娘煮纵。我一直安慰自己,他們只是感情好偏螺,可當我...
- 文/花漫 我一把揭開白布行疏。 她就那樣靜靜地躺著,像睡著了一般套像。 火紅的嫁衣襯著肌膚如雪酿联。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼销部,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了制跟?” 一聲冷哼從身側(cè)響起舅桩,我...
- 正文 年R本政府宣布,位于F島的核電站附鸽,受9級特大地震影響脱拼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坷备,卻給世界環(huán)境...
- 文/蒙蒙 一熄浓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧省撑,春花似錦赌蔑、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肥败,卻和暖如春趾浅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馒稍。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 使用ListView加載網(wǎng)絡數(shù)據(jù) 本文采用fecth來進行網(wǎng)絡請求的 創(chuàng)建一個構(gòu)造器 創(chuàng)建網(wǎng)絡請求 創(chuàng)建Loadi...
- React-Native 學習筆記 - 使用FlastList加載網(wǎng)絡數(shù)據(jù) 聲明變量 網(wǎng)絡請求方法 加載等待的Vi...
- “My name is Alice” 十五年前的這句話 足夠讓你熱血沸騰 如今 《生化危機:終章》已上映 按照老規(guī)...