從零學React Native之14 網路請求

2021-09-23 02:12:02 字數 3451 閱讀 6299

通過http或者https協議與網路側伺服器交換資料是移動應用中常見的通訊方式。 node-fetch是rn推薦的請求方式。

react native框架在初始化專案時, 引入了node-fetch包 (因為npm3把依賴全部攤平了,node-fetch就在node_modules目錄下)

下面就是專案中引入的node-fetch的原始碼:

聯網分為傳送請求和接受響應兩步。分開來分析下。

傳送http/https gong細分一下共有6個步驟

1. 確定並準備請求位址與協議

2. 確定請求中的http方法

3. 準備請求中藥傳輸的訊息頭

4. 準備身份驗證資訊

5. 確定是否需要攜帶訊息體/引數

6. 發出訊息

我們以查詢號碼歸屬地這個位址演示下。

`;根據http協議的設計初衷,不同的方法對資源有不同的操作方式:

+ put :增

+ delete :刪

+ post:改

+ get:查

最常用的是get和post(實際上get和post都能辦到增刪改查)

如果不指定,預設的方法為get,當前使用的api介面只支援get請求

let map=;
接下來需要設定請求中需要傳輸的訊息頭。訊息頭分為兩種,其中一種是協議規定的標準訊息頭;另一種是使用者自定義的訊息頭。

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=

20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=

0;//設定超時時間,0代表沒有

map.size=

0;//請求回應中訊息體最大允許的長度,0沒有限制

rn支援gzip/deflate格式編碼,不需要對此進行設定。rn收到gzip/deflate格式編碼會自動轉換為普通格式交給開發者。

訊息頭是不區分大小寫的,如果有大寫字母,傳輸的時候回自動轉換為小寫。

key資訊請自己註冊。

某些http請求需要加入身份驗證資訊,比如上面的apikey,有些時候在需要進行身份驗證的時候需要兩次http請求來完成。

如果需要帶訊息體,可以通過body配置,get請求不需要。

map.body=json.stringify();
post請求引數是放在訊息體中,而get直接拼裝在請求位址後面通過?間隔。

let url=``;

letparams='num=13126939916';

let requesturl=url+"?"+params;

將上述5步聯合起來就可以得到傳送http或https的請求片段。如下:

componentdidmount() ;

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=

20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=

0;//設定超時時間,0代表沒有

map.size=

0;//請求回應中訊息體最大允許的長度,0沒有限制

'this is body';

fetch(requesturl,map)

.then(

(result)=>)}

找到info.plist檔案新增nsallowsarbitraryloads

或者直接在xcode中開啟ios專案進行配置。

當請求成功,會返回乙個儲存有回應資料的物件

type 字串型別,記錄請求型別

url 請求位址

status 響應碼 200代表成功

ok 布林型別,記錄是否成功。

fetch 返回的 then 方法有乙個 response 引數,它是乙個 response 例項。 response 有如下方法:

下面就是完整的返回json的例子:

fetch(requesturl,map)

.then

((result)=>result.json()) // 返回帶有json格式的promise

.catch

((error)=>)

.then

((responsedata)=>);

componentdidmount() ;

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=0;//設定超時時間,0代表沒有

map.size=0;//請求回應中訊息體最大允許的長度,0沒有限制

fetch(requesturl,map)

.then

((result)=>result.json()) //.json

() .catch

((error)=>)

.then

((responsedata)=>);

}

當然也可以用es2017的語法:

async network() 

});let responsejson = await response.json();

console.log(responsejson);

return responsejson;

} catch (error)

}

從零搭建React Native專案

reat native專案搭建,跟著官網文件 搭建環境,其實不難,不過新手可能還是會有些地方,覺得難理解,所以,寫個部落格,希望第一次用reat native的小夥伴,可以節省點時間,快速搭建專案,跑起hello word 開發平台是windows,目標平台是android,1.安裝依賴有 node...

從零雙排學java之集合collection

集合跟陣列一樣都是一種容器 集合為什麼會出現?陣列有什麼弊端 1.長度一旦確定不能修改 2.只能儲存同一種型別的元素 集合的好處 1.長度可變 2.可以存放不同型別的元素 注意 集合只能存 物件 也就是引用型別 基本型別會自動裝箱成包裝類 獲取元素個數 system.out.println coll...

從零雙排學java之迭代器

建立乙個集合 collection collection new arraylist 生成乙個迭代器 iterator iterator collection.iterator 判斷是否還有下乙個元素 iterator.hasnext 獲取下乙個元素 iterator.next 需求 建立乙個集合 ...