react與fetch

weixin_34337265發表於2018-10-16

JavaScript 中的 ajax 很早之前就有一個詬病————複雜業務下的 callback 巢狀的問題。promise 正是 js 中解決這一問題的鑰匙。
接下來我們在react專案中應用到的fetch 就用到了最新的 promise。
那我們如何在react專案中應用fetch呢?
第一步:安裝
用 npm 安裝的話,執行cnpm install whatwg-fetch --save即可安裝。


13341631-43a0d22e774c9c49.png

為了相容老版本瀏覽器,還需要安裝 es6-promise


13341631-c64cb1d2f73a2013.png

第二步:在實際專案中的應用。
第一種get 使用。
首先要引入依賴的外掛,見./app/fetch/test.js中


13341631-cfff60a56a23d3e8.png

然後這樣就可以發起一個 get 請求。
先看我們的./app/index.jsx檔案內容,他需要引用getData


13341631-551467e9936e9620.png

這裡的fetch是引用了外掛之後即可用的方法,使用非常簡單。方法的第一個引數是 url 第二個引數是配置資訊。
fetch 方法請求資料,返回的是一個 Promise 物件。


13341631-6e7216b7fc99a96f.png

歡迎進入前端全棧群:866109386,來交流討論吹水。

以上程式碼的配置中,credentials: 'include'表示跨域請求是可以帶cookie(fetch 跨域請求時預設不會帶 cookie,需要時得手動指定
credentials: 'include'。這和 XHR 的 withCredentials 一樣),headers可以設定 http 請求的頭部資訊。
第二種post使用
可以根據get請求的方法進行同理的引用外掛,在我們的./app/index.jsx中,我們需要引用


13341631-f2c474d5d03cd428.png

然後用 fetch 發起一個 post 請求(有method: 'POST'),第一個引數是 url,第二個引數是配置資訊。注意下面配置資訊中的headers和
body的格式。fetch 提交資料之後,返回的結果也是一個 Promise 物件,跟 get 方法一樣。


13341631-569bb934bff6af39.png

我們以上兩個用法中,返回的Promis物件不一樣,一個是res.text(),一個是res.json()。這兩個方法就是將返回的 Response 資料轉換成
字串或者JSON格式,這也是 js 中常用的兩種格式。
接下來我們要做的事情,其實是一個精簡工作。如果每次獲取資料,都向上面一樣寫好多程式碼,就太冗餘了,我們這裡將 get 和 post 兩個方法單獨抽象出來。
這兩個方法抽象之後,接下來我們再用,就變得相當簡單了。
第一步:提取公共部分


13341631-4fde757ffd9e6de8.png

getjs部分


13341631-e615338b3e7a0d6b.png

postjs提取部分


13341631-27447973f3375f02.png

接下來看我們的./app/index.jsx檔案是如何應用的


13341631-63bb91e18bc43479.png

接下來執行專案即可。
發現文章中的錯誤,或者有更好的建議,歡迎評論或進前端全棧群:866109386,來交流討論吹水。

相關文章