React Native填坑之旅--HTTP請(qǐng)求篇

React Native填坑之旅--Button篇
React Native填坑之旅--動(dòng)畫
React Native填坑之旅--HTTP請(qǐng)求篇

如果不能從頭到尾的建立一個(gè)RN應(yīng)用七婴,那么RN將失色不少富拗。本以為HTTP請(qǐng)求部分需要使用Native的實(shí)現(xiàn)涤久,Android和iOS各回各家非春,各調(diào)各庫了藤乙。Google了一下之后居然RN可以使用fetch庫。這個(gè)庫是用來代替流傳已久的XHR的担敌。

下面看看如何使用fetch 請(qǐng)求Restful API的重虑。API是dribbble的。這個(gè)API需要注冊(cè)廷支,所以如果你要運(yùn)行下面的例子的話频鉴,最好注冊(cè)一下,或者換一個(gè)站點(diǎn)的API試試恋拍。

隨著ES6垛孔,JavaScript內(nèi)置的支持了Promise這個(gè)填補(bǔ)回調(diào)地獄大坑的功能。fetch很好的利用了這一點(diǎn)施敢,它的請(qǐng)求返回結(jié)果就是Promise周荐。所以,bye回調(diào)悯姊。

fetch的使用非常簡(jiǎn)單,比現(xiàn)在流行的任何Native庫都好用贩毕。

fetch('https://api.dribbble.com/v1/shots', init)
            .then((response) => response.json())
            .then((responseJson) => {
                this.setState({message: `${responseJson[0].id} - ${responseJson[0].title}`});
            })
            .catch(e => {console.log(`error ${e}`)});

其中的init是一個(gè)Object或者說是一個(gè)字典悯许,里面包含了關(guān)于請(qǐng)求方式是GET或者POST等的信息』越祝看起來是這樣的:

        const init = {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'Authorization': '需要認(rèn)證數(shù)據(jù)',
            },
        };

請(qǐng)求發(fā)出之后先壕,在第一個(gè)then方法里處理response,返回response.json()谆甜,返回的是一個(gè)對(duì)象垃僚。

在第二個(gè)then方法里消費(fèi)從response里提取出來的json數(shù)據(jù)。因?yàn)樵揂PI返回的是一個(gè)數(shù)組规辱,所以我們?nèi)?shù)組第一個(gè)元素谆棺,并在Alert中顯示這個(gè)元素的idtitle

最后罕袋,使用一個(gè)catch方法處理萬一發(fā)生的異常改淑。這個(gè)錯(cuò)誤顯示在了console里。你也可以顯示在界面上浴讯,不過你要確保這樣做復(fù)合UE的要求朵夏。在界面上顯示異常用console.error(msg: string),顯示警告使用console.warn(msg: string)榆纽。

更新界面

上面提到的都是如何使用fetch請(qǐng)求的仰猖。如果你注意代碼的話就會(huì)發(fā)現(xiàn)里面已經(jīng)包含了如何更新界面的部分捏肢。這里在詳細(xì)解釋一下。

constructor方法里設(shè)置組件的state初值為this.state = {message: ''};饥侵。在fetch成功的獲取到數(shù)據(jù)鸵赫,或者出現(xiàn)錯(cuò)誤的時(shí)候(本例的做法是在console里打印log,這是適合于測(cè)試不適合產(chǎn)品環(huán)境)更新組件的state爆捞。

this.setState({message: `${responseJson[0].id} - ${responseJson[0].title}`});

那么組件就會(huì)根據(jù)state值更新組件:

<Text style={{marginTop: 10}}>{this.state.message ? this.state.message : "Empty"}</Text>

是不是非常簡(jiǎn)單奉瘤。

全部代碼

import React from 'react';
import {
    View,
    Alert,
    Text
} from 'react-native';

import Button from '../view/touchableButton';

export default class HomeController extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            message: ''
        };

        this.fetchAction = this.fetchAction.bind(this);
    }

    componentDidMount() {

    }

    fetchAction() {
        this.setState({message: 'Empty'});

        const init = {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'Authorization': '需要認(rèn)證',
            },
            // body: JSON.stringify({
            //
            // })
        };

        fetch('https://api.dribbble.com/v1/shots', init)
            .then((response) => response.json())
            .then((responseJson) => {

                this.setState({message: `${responseJson[0].id} - ${responseJson[0].title}`});
            })
            .catch(e => {console.log(`error ${e}`)});
    }

    render() {
        return (
            <View style={{flex: 1, marginTop: 100, alignItems: 'center'}}>
                <Button style={{marginTop: 50}} buttonTitle='Click to fetch'
                    onFetch={this.fetchAction} />
                <Text style={{marginTop: 10}}>{this.state.message ? this.state.message : "Empty"}</Text>
            </View>
        );
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寒矿,一起剝皮案震驚了整個(gè)濱河市狠半,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缝左,老刑警劉巖成肘,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卖局,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡双霍,警方通過查閱死者的電腦和手機(jī)砚偶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洒闸,“玉大人染坯,你說我怎么就攤上這事∏鹨荩” “怎么了单鹿?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)深纲。 經(jīng)常有香客問我仲锄,道長(zhǎng),這世上最難降的妖魔是什么湃鹊? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任儒喊,我火速辦了婚禮,結(jié)果婚禮上币呵,老公的妹妹穿的比我還像新娘怀愧。我一直安慰自己,他們只是感情好余赢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布掸驱。 她就那樣靜靜地躺著,像睡著了一般没佑。 火紅的嫁衣襯著肌膚如雪毕贼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天蛤奢,我揣著相機(jī)與錄音鬼癣,去河邊找鬼陶贼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛待秃,可吹牛的內(nèi)容都是我干的拜秧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼章郁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枉氮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暖庄,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤聊替,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后培廓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惹悄,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年肩钠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泣港。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡价匠,死狀恐怖当纱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踩窖,我是刑警寧澤坡氯,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站毙石,受9級(jí)特大地震影響廉沮,放射性物質(zhì)發(fā)生泄漏颓遏。R本人自食惡果不足惜徐矩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叁幢。 院中可真熱鬧滤灯,春花似錦、人聲如沸曼玩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黍判。三九已至豫尽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷帖,已是汗流浹背美旧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工渤滞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榴嗅。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓妄呕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嗽测。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绪励,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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