摘要:填坑之旅篇填坑之旅動畫填坑之旅請求篇如果不能從頭到尾的建立一個應(yīng)用,那么將失色不少。隨著,內(nèi)置的支持了這個填補回調(diào)地獄大坑的功能。很好的利用了這一點,它的請求返回結(jié)果就是。在界面上顯示異常用,顯示警告使用。
React Native填坑之旅--Button篇
React Native填坑之旅--動畫
React Native填坑之旅--HTTP請求篇
如果不能從頭到尾的建立一個RN應(yīng)用,那么RN將失色不少。本以為HTTP請求部分需要使用Native的實現(xiàn),Android和iOS各回各家,各調(diào)各庫了。Google了一下之后居然RN可以使用fetch庫。這個庫是用來代替流傳已久的XHR的。
下面看看如何使用fetch 請求Restful API的。API是dribbble的。這個API需要注冊,所以如果你要運行下面的例子的話,最好注冊一下,或者換一個站點的API試試。
隨著ES6,JavaScript內(nèi)置的支持了Promise這個填補回調(diào)地獄大坑的功能。fetch很好的利用了這一點,它的請求返回結(jié)果就是Promise。所以,bye回調(diào)。
fetch的使用非常簡單,比現(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是一個Object或者說是一個字典,里面包含了關(guān)于請求方式是GET或者POST等的信息。看起來是這樣的:
const init = { method: "GET", headers: { "Accept": "application/json", "Content-Type": "application/json", "Authorization": "需要認證數(shù)據(jù)", }, };
請求發(fā)出之后,在第一個then方法里處理response,返回response.json(),返回的是一個對象。
在第二個then方法里消費從response里提取出來的json數(shù)據(jù)。因為該API返回的是一個數(shù)組,所以我們?nèi)?shù)組第一個元素,并在Alert中顯示這個元素的id和title。
最后,使用一個catch方法處理萬一發(fā)生的異常。這個錯誤顯示在了console里。你也可以顯示在界面上,不過你要確保這樣做復合UE的要求。在界面上顯示異常用console.error(msg: string),顯示警告使用console.warn(msg: string)。
更新界面上面提到的都是如何使用fetch請求的。如果你注意代碼的話就會發(fā)現(xiàn)里面已經(jīng)包含了如何更新界面的部分。這里在詳細解釋一下。
在constructor方法里設(shè)置組件的state初值為this.state = {message: ""};。在fetch成功的獲取到數(shù)據(jù),或者出現(xiàn)錯誤的時候(本例的做法是在console里打印log,這是適合于測試不適合產(chǎn)品環(huán)境)更新組件的state。
this.setState({message: `${responseJson[0].id} - ${responseJson[0].title}`});
那么組件就會根據(jù)state值更新組件:
{this.state.message ? this.state.message : "Empty"}
是不是非常簡單。
全部代碼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": "需要認證", }, // 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 (); } } {this.state.message ? this.state.message : "Empty"}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80580.html
摘要:構(gòu)造函數(shù)定義偵探類作為例子。里的既是類的定義,也是構(gòu)造函數(shù)。在構(gòu)造函數(shù)中定義的實例方法和屬性在每一個實例中都會保留一份,而在原型中定義的實例方法和屬性是全部實例只有一份。 無論React還是RN都已經(jīng)邁入了ES6的時代,甚至憑借Babel的支持都進入了ES7。ES6內(nèi)容很多,本文主要講解類相關(guān)的內(nèi)容。 構(gòu)造函數(shù) 定義偵探類作為例子。 ES5的類是如何定義的。 function ES5D...
摘要:希望幫助更多的前端愛好者學習。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實踐譯者張捷滬江前端開發(fā)工程師當你問起有關(guān)與時,老司機們首先就會告訴你其實是個沒有網(wǎng)絡(luò)請求功能的庫。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學習 React.js 比你想象的要簡單 原文地址:Learning React.js is easier than you think 原文作...
摘要:是的架構(gòu)的實現(xiàn)。是在年提出的一種前端架構(gòu),主要用來處理復雜的邏輯的一致性問題當時是為了解決頁面的消息通知問題。 去年10月底來到了新公司,剛開始接手 Android 項目時,發(fā)現(xiàn)該項目真的是一團遭,項目開發(fā)上沒有任何架構(gòu)可言,開發(fā)人員連簡單的 MVC、MVP 都不了解,Activity 及其臃腫,業(yè)務(wù)邊界也不明確,因此我決定重新分析一下當前主流的幾種開發(fā)架構(gòu),選出適合當前項目的架構(gòu)形式...
摘要:前言前一段時間,完成了公司的消息推送功能,使用的是極光推送,在配置的推送功能時,遇到了一個坑,記錄一下坑使用了極光推送官方的插件。 前言 前一段時間,完成了公司 app 的消息推送功能,使用的是極光推送,在配置 ios 的推送功能時,遇到了一個坑,記錄一下 坑 使用了極光推送官方的插件 jpush-react-native。按照文檔,將 ios 和 android 配置好,結(jié)果發(fā)現(xiàn) a...
閱讀 5766·2021-11-24 10:25
閱讀 2702·2021-11-16 11:44
閱讀 3860·2021-10-11 11:09
閱讀 3178·2021-09-02 15:41
閱讀 3261·2019-08-30 14:14
閱讀 2290·2019-08-29 14:10
閱讀 2354·2019-08-29 11:03
閱讀 1131·2019-08-26 13:47