亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

React Native 基礎(chǔ)練習(xí)指北(二)

shixinzhang / 3405人閱讀

摘要:承接上文基礎(chǔ)練習(xí)指北一,我們來看看如果通過接口獲取線上數(shù)據(jù)并展示。如果使用無法刷新效果,請(qǐng)檢查的權(quán)限設(shè)置。會(huì)在組件加載完成后,使用方法發(fā)送請(qǐng)求,并且只發(fā)送一次。牢記在最后要使用,否則不會(huì)出現(xiàn)錯(cuò)誤提示。下一步在返回的對(duì)象中添加空的。

承接上文《React Native 基礎(chǔ)練習(xí)指北(一)》,我們來看看React Native如果通過接口獲取線上數(shù)據(jù)并展示。

Tips: 如果使用cmd+R無法刷新效果,請(qǐng)檢查index.ios.js的權(quán)限設(shè)置。

一、展示單條數(shù)據(jù)

通常我們會(huì)在require("react-native");后,寫好儲(chǔ)存API的變量(此處我們使用簡(jiǎn)單的API做演示):

var REQUEST_URL = "http://platform.sina.com.cn/sports_all/client_api?app_key=3571367214&_sport_t_=football&_sport_s_=opta&_sport_a_=teamOrder&type=213&season=2015&format=json";

這里我們暫時(shí)使用新浪體育2015年中超聯(lián)賽信息的接口,可以得到中超16支球隊(duì)2015賽季的相關(guān)信息(未經(jīng)授權(quán),悄悄的使用,打槍的不要)。

接下來,我們要添加一些初始化的狀態(tài),我們可以通過this.state.movies === null判斷數(shù)據(jù)是否已經(jīng)成功加載。將下面的代碼加在render方法前面:

getInitialState: function() {
    return {
        teams: null,
    };
},

當(dāng)react-native組件加載完成后,我們需要發(fā)送我們的請(qǐng)求。React會(huì)在react-native組件加載完成后,使用componentDidMount方法發(fā)送請(qǐng)求,并且只發(fā)送一次。

componentDidMount: function() {
    this.fetchData();
},

下面,我們需要添加fetchData方法,它是用來取回?cái)?shù)據(jù)的。在React的工作流程中,setState會(huì)觸發(fā)一次重繪,隨后render方法會(huì)發(fā)現(xiàn)this.state.movies不再是null,你所需要做的就是使用this.setState({movies: data})。牢記在最后要使用done(),否則不會(huì)出現(xiàn)錯(cuò)誤提示。

fetchData: function() {
    fetch(REQUEST_URL)
    .then((response) => response.json())
    .then((responseData) => {
        this.setState({
            teams: responseData.result.data,
        });
    })
    .done();
},

現(xiàn)在,我們需要修改render方法,從而當(dāng)我們沒有拿到數(shù)據(jù)時(shí),渲染出一個(gè)loading視圖,隨后呈現(xiàn)出第一個(gè)球隊(duì)信息。

render: function() {
    if (!this.state.teams) {
        return this.renderLoadingView();
    }

    var team = this.state.teams[11];
        return this.renderTeam(team);
},

renderLoadingView: function() {
    return (
        
            
                Loading teams...
            
        
    );
},

renderTeam: function(team) {
    return (
        
            
            
                {team.team_cn}
                {team.team_order}
            
        
    );
}

現(xiàn)在,在iOS模擬器中cmd+R,在請(qǐng)求拿到返回?cái)?shù)據(jù)之前,你會(huì)看到“Loading teams...”,隨后會(huì)渲染出第一個(gè)球隊(duì)信息。

二、展示數(shù)據(jù)列表

下面我們來看看如何把所有數(shù)據(jù)展示在ListView組件中,而不是僅僅展示一條數(shù)據(jù)。

首先我們?cè)谧钌厦娑xReact的時(shí)候加入ListView

var {
    AppRegistry,
    Image,
    ListView,
    StyleSheet,
    Text,
    View
} = React;

接下來,我修改render方法,從而能夠以列表方式展示出數(shù)據(jù):

render: function() {
    if (!this.state.loaded) {
      return this.renderLoadingView();
    }

    return (
      
    );
  },

ListView可以判斷哪些數(shù)據(jù)發(fā)生了改變,并在數(shù)據(jù)更新時(shí),體現(xiàn)在列表中。

我們不難發(fā)現(xiàn),我們使用了this.state中的dataSource。下一步在getInitialState返回的對(duì)象中添加空的dataSource。隨后,我們講數(shù)據(jù)存到dataSource中,我不再使用this.state.movies來避免數(shù)據(jù)重復(fù)加載,而是使用布爾值this.state.loaded來判斷數(shù)據(jù)是否成功獲取。

getInitialState: function() {
    return {
      dataSource: new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2,
      }),
      loaded: false,
    };
  },

下面是完善后的fetchData方法:

fetchData: function() {
    fetch(REQUEST_URL)
      .then((response) => response.json())
      .then((responseData) => {
        this.setState({
          dataSource: this.state.dataSource.cloneWithRows(responseData.result.data),
          loaded: true,
        });
      })
      .done();
  },

最后,我們把ListView的樣式添加到styles對(duì)象中:

listView: {
    paddingTop: 20,
    backgroundColor: "#F5FCFF",
},

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85615.html

相關(guān)文章

  • React Native 基礎(chǔ)練習(xí)指北(一)

    摘要:圍觀本文需自備,,以及。使用打開,并點(diǎn)擊,會(huì)看到模擬器以及此項(xiàng)目對(duì)應(yīng)的內(nèi)容,效果如下如果想要修改顯示內(nèi)容,請(qǐng)打開,里面是一堆模樣的東西。接下來,我們按照教程,來展示一張電影海報(bào),為了方便,我們直接修改。 原文鏈接:http://www.tinghaige.com/ 本著什么都要攙和的原則,一起來看看React Native是如何開發(fā)iOS APP。 圍觀本文需自備Mac OSX ,...

    nidaye 評(píng)論0 收藏0
  • ES6指北【6】——詳談解構(gòu)賦值【附贈(zèng)練習(xí)題】

    摘要:指北詳談解構(gòu)賦值附贈(zèng)練習(xí)題一何謂解構(gòu)賦值基本概念首先我們看一下給的定義解構(gòu)賦值語法是一個(gè)表達(dá)式,這使得可以將值從數(shù)組或?qū)傩詮膶?duì)象提取到不同的變量中從定義中,我們可以發(fā)現(xiàn)解構(gòu)賦值的作用是對(duì)變量進(jìn)行賦值主要通過兩個(gè)方面實(shí)現(xiàn)這個(gè)作用數(shù)組將數(shù)組中的 ES6指北【6】——詳談解構(gòu)賦值【附贈(zèng)練習(xí)題】 一、何謂解構(gòu)賦值? 1. 基本概念 首先我們看一下MDN給的定義 解構(gòu)賦值語法是一個(gè) Javasc...

    sorra 評(píng)論0 收藏0
  • AE動(dòng)畫轉(zhuǎn)Web代碼工具指北-Lottie

    摘要:簡(jiǎn)單來說,就是一個(gè)可以將動(dòng)畫轉(zhuǎn)成可運(yùn)行在上的插件。使用工具使用前請(qǐng)確保已安裝這以下工具。更詳細(xì)內(nèi)容可參考官網(wǎng)庫最后再分項(xiàng)目框架提供兩個(gè)的庫 簡(jiǎn)介 Lottie 是 Airbnb 開源的一套跨平臺(tái)的完整的動(dòng)畫效果解決方案,設(shè)計(jì)師可以使用 Adobe After Effects 設(shè)計(jì)出漂亮的動(dòng)畫之后,使用 Lottic 提供的 Bodymovin 插件將設(shè)計(jì)好的動(dòng)畫導(dǎo)出成 JSON 格式,...

    SexySix 評(píng)論0 收藏0
  • 2017-10-19 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選源碼解析一組件的實(shí)現(xiàn)與掛載寫在的前端數(shù)據(jù)層不完全指北非時(shí)圓角邊框剪裁問題專題之解讀排序源碼中的閉包再也不用擔(dān)心面試被問什么是閉包了中文路由路由基礎(chǔ)入門實(shí)戰(zhàn)操作詳細(xì)指南前端學(xué)習(xí)教程用實(shí)現(xiàn)一門編程語言語言簡(jiǎn)介眾成翻譯第 2017-10-19 前端日?qǐng)?bào) 精選 React源碼解析(一):組件的實(shí)現(xiàn)與掛載寫在2017的前端數(shù)據(jù)層不完全指北Chrome opacity非1時(shí)border...

    v1 評(píng)論0 收藏0
  • Java unsafe操作指北

    摘要:本文主要介紹下中的主要操作。所謂的內(nèi)存屏障,是之虛擬機(jī)在對(duì)于這樣的語句,在及后續(xù)寫入操作執(zhí)行前,保證的寫入操作對(duì)其它處理器可見。是會(huì)插入的內(nèi)存屏障,效率略低本篇為俺的課堂基礎(chǔ)手寫的前置知識(shí),歡迎大家圍觀 Unsafe是Java無鎖操作的基石,在無鎖并發(fā)類中都少不了它們的身影,比如ConcurrentHashMap, ConcurrentLinkedQueue, 都是由Unsafe類來實(shí)...

    StonePanda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<