React Native學習筆記-加載網(wǎng)絡上電影數(shù)據(jù)并且使用listview分批加載.


'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);



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渐溶,一起剝皮案震驚了整個濱河市毛秘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胡控,老刑警劉巖扳剿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昼激,居然都是意外死亡庇绽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門橙困,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞧掺,“玉大人,你說我怎么就攤上這事凡傅”俦罚” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵夏跷,是天一觀的道長上陕。 經(jīng)常有香客問我桩砰,道長,這世上最難降的妖魔是什么释簿? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任亚隅,我火速辦了婚禮,結(jié)果婚禮上庶溶,老公的妹妹穿的比我還像新娘煮纵。我一直安慰自己,他們只是感情好偏螺,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布行疏。 她就那樣靜靜地躺著,像睡著了一般套像。 火紅的嫁衣襯著肌膚如雪酿联。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天夺巩,我揣著相機與錄音贞让,去河邊找鬼。 笑死柳譬,一個胖子當著我的面吹牛喳张,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播美澳,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼销部,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了制跟?” 一聲冷哼從身側(cè)響起舅桩,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雨膨,沒想到半個月后江咳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哥放,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年歼指,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甥雕。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出社露,到底是詐尸還是另有隱情挟阻,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站附鸽,受9級特大地震影響脱拼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坷备,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一熄浓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧省撑,春花似錦赌蔑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肥败,卻和暖如春趾浅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馒稍。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工皿哨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筷黔。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像仗颈,于是被迫代替她去往敵國和親佛舱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容