使用 React Hooks 列出 Github 的 Repositories API。
一打開頁面,抓取 12 筆 Vercel 公司的公開 Repository。
滾至頁面底端後,繼續加上 12 筆,直到沒有資料即停止。
https://list-organization-repos.vercel.app/
git clone https://github.com/ymcheung/list-organization-repos
cd list-organization-repos
npm install
npm start
不用設定 Authorization 的成品,請切換至 feature/remove-authorization 分支。
cp .env.sample .env
- 取得 Personal Access Token
- 取代
REACT_APP_GITHUB_PERSONAL
的值
- All (預設): 所有 Repository
- Forks: 僅列出從它處 Fork 回來的 Repository
- Created Time (預設): 創建 Repo 的時間
- Updated Time: Repo 更新的時間
- Pushed Time: 最近 Push 上 Github 的時間
- Full Name: 全名
- Descend: 降冪排列
- Ascend: 升冪排列
fetch
取得資料,轉為json
陣列- 將
json
陣列儲存至useState
Hooks,取名repos
。
接著有兩種功能:
- 按 Input Radio,將
<input>
的name
和value
更新 Hooks state 變數form
的資料,form.page
設定為 1。 useEffect()
設定form
為 dependency,會開始執行handleFetchRepos()
。
- 監聽
scroll
事件,捲動至頁面底端時,設定isFetching
為true
。 - 讓
form.page
+1,抓取下一頁資料 - 透過
prevState
組合現有和新加入的陣列。接著設定isFetching
為false
。 - 直到回傳的
json
長度為 0 時,設定noData
為true
,不再更新repos
。
- 更新 Type、Sort 與 Direction 之後,會從第 1 筆資料重新顯示。
- 監聽
scroll
事件使用debounce
控制數量 - 沒有設定 Authorization 的
fetch
,每個 IP 每小時只能存取 60 次。加上 Authorization 後,使得每小時可以fetch
的次數達 5,000 次
- TypeScript
- ESLint