上禮拜意外獲得一個實作的機會,
雖然在拿到這份作業時,心中忐忑不安,
因為除了串API是自己確定自己有做過的內容外,
其他部分對我而言都是沒碰過的東西。
不過想著「當工程師就該有解決問題的能力」這點,我還是勇敢接招了XD
(其實OS是老娘就跟你拚了~~~~)
搶先看完成的畫面
GitHub連結在這裡
實作需求內容
1. 用GitHub API串接自己的repo資料到頁面上,並顯示標題、敘述、URL。
2. 用無限滾動(infinite scroll)的技術讀取repo資料。
需求解法相關資料收集
首先,我先透過收集資料去尋找可以完成需求內容的靈感。
主要就分以下兩個方向下去收集資料。
1. 看API使用相關的資料
- 了解到API串接只需要透過GitHub產出自己的token再帶入header就可以了
- 確認到自己要用哪條API下去拿我要的資料
- 用POSTMAN先模擬是否能正常取得資料,以及會取得那些資料
2. 查無限滾動相關的資料
- 了解到大概念是要偵測捲軸是否移動到整個頁面的底部,讀到底部再讀取一次資料
- 需要透過clientHeight、scrollY、scrollHeight去做計算是否已經滑到底部
實作過程(包含發生問題處及解法)
1. 查完資料後,我先設定一個vue專案,進行版面的切版。
(想讓自己多刻意練習一些過去用過的東西切版內容,所以雖然需求沒有要做RWD,
我還是加了這部分的內容)。
2. 切完版之後,我就使用Axios串接API拿自己的repo資料,並透過v-for進行渲染。
串API時出現的問題
在用POSTMAN模擬API串接時,有遇到跨網域存取被拒絕(CORS)的問題,但是這次使用的是public API,
並沒有一位負責製作API的夥伴可以協助從後端解決這個問題,所以就上網查詢如何透過前端解決這樣的狀況。
有查到可以利用cors-anywhere這個API,可透過另一個管道幫我們處理CORS的問題,在要串接的API前面,
再加上cors-anywhere API所提供的網址,最後順利拉取到資料。

3. 確定能夠正確的渲染到頁面後,接著實作infinite scroll的部分,這個部分的實作又拆解成以下幾個步驟。
(1) 進入頁面時,不會將所有資料一次渲染,只會渲染特定筆數的資料
=> 為了讓資料不要一次顯示,除了在Vue data中宣告透過API fetch到的所有repo的資料陣列外,
又宣告了另一個空陣列,好讓頁面上要渲染資料可以依照有無滑到頁面底部而增加。

=>接著讓第一次進入頁面時,currentRenderRepos就能被放入10筆資料。
(這次實作,我想讓每次載入資料時,最多都載入10筆資料)
所以在created的fetch資料動作中,除了拉取API資料外,
還必須讓前10筆資料塞入渲染用的陣列。
我的想法是利用slice去把myTotalRepos的前10筆資料取出,
並且push到渲染用陣列。
雖然在拿到這份作業時,心中忐忑不安,
因為除了串API是自己確定自己有做過的內容外,
其他部分對我而言都是沒碰過的東西。
不過想著「當工程師就該有解決問題的能力」這點,我還是勇敢接招了XD
(其實OS是老娘就跟你拚了~~~~)
搶先看完成的畫面
GitHub連結在這裡
實作需求內容
1. 用GitHub API串接自己的repo資料到頁面上,並顯示標題、敘述、URL。
2. 用無限滾動(infinite scroll)的技術讀取repo資料。
需求解法相關資料收集
首先,我先透過收集資料去尋找可以完成需求內容的靈感。
主要就分以下兩個方向下去收集資料。
1. 看API使用相關的資料
- 了解到API串接只需要透過GitHub產出自己的token再帶入header就可以了
- 確認到自己要用哪條API下去拿我要的資料
- 用POSTMAN先模擬是否能正常取得資料,以及會取得那些資料
2. 查無限滾動相關的資料
- 了解到大概念是要偵測捲軸是否移動到整個頁面的底部,讀到底部再讀取一次資料
- 需要透過clientHeight、scrollY、scrollHeight去做計算是否已經滑到底部
實作過程(包含發生問題處及解法)
1. 查完資料後,我先設定一個vue專案,進行版面的切版。
(想讓自己多刻意練習一些過去用過的東西切版內容,所以雖然需求沒有要做RWD,
我還是加了這部分的內容)。
2. 切完版之後,我就使用Axios串接API拿自己的repo資料,並透過v-for進行渲染。
串API時出現的問題
在用POSTMAN模擬API串接時,有遇到跨網域存取被拒絕(CORS)的問題,但是這次使用的是public API,
並沒有一位負責製作API的夥伴可以協助從後端解決這個問題,所以就上網查詢如何透過前端解決這樣的狀況。
有查到可以利用cors-anywhere這個API,可透過另一個管道幫我們處理CORS的問題,在要串接的API前面,
再加上cors-anywhere API所提供的網址,最後順利拉取到資料。

3. 確定能夠正確的渲染到頁面後,接著實作infinite scroll的部分,這個部分的實作又拆解成以下幾個步驟。
(1) 進入頁面時,不會將所有資料一次渲染,只會渲染特定筆數的資料
=> 為了讓資料不要一次顯示,除了在Vue data中宣告透過API fetch到的所有repo的資料陣列外,
又宣告了另一個空陣列,好讓頁面上要渲染資料可以依照有無滑到頁面底部而增加。

=>接著讓第一次進入頁面時,currentRenderRepos就能被放入10筆資料。
(這次實作,我想讓每次載入資料時,最多都載入10筆資料)
所以在created的fetch資料動作中,除了拉取API資料外,
還必須讓前10筆資料塞入渲染用的陣列。
我的想法是利用slice去把myTotalRepos的前10筆資料取出,
並且push到渲染用陣列。













