範例:串接 Star Wars API
- API: Application Programming Interface
- SWAPI Film List
- Package axios
- Built-in Fetch API
- HTTP response status codes
使用 Fetch 透過網路取得 JSON,回傳的 response 需要先透過 json()
轉換,然後我們就能開始使用資料!
這邊有個小細節就是使用 map()
篩選出我們需要的欄位,不要把整包 API 資料都帶走,減少資料的複雜度。
我們也可以搭配 Async/Await 來使用,我本身也比較喜歡 async/await
大於 .then()
,因為讀起來更簡單、直覺。
注意,使用時除了在 Fetch 加上 await
之外,使用 json()
把回傳結果的 body text 解析成 JSON 型別的時候也要加上 await
。
Loading & Error Handling
最後是加上 Loading 與錯誤處理的部分,我們會用 Fetch API 作為範例,如果用的是其他 API 像是 axios,可能在寫法上會有些許差異。
Working with useEffect and useCallback Hooks
最後我們用 useEffect 讓畫面渲染後先 Call API 獲取一次資料。
除此之外,我們會加上 useCallback 確保 fetchMovieHandler
函式不會在 useEffect 中形成無限迴圈,因此要在 dependency array 放入函式內有使用到的狀態。
(在這個範例中我們沒有使用任何依賴,但其他情況下就有可能會用到)
Sending a POST request to Firebase Realtime Database
Fetch API 除了 GET 之外也能用 POST,寫法是在 fetch()
的第二個參數放一個物件,然後基本上會設定 method
、body
,與 headers
這幾個基本的欄位。
回顧
看完這篇文章,我們到底有什麼收穫呢?藉由本文可以理解到…
- Fetching API data with useEffect and useCallback Hooks
References