EP30 - ex2. Fetching data

更新 發佈閱讀 9 分鐘
fetching data 應該是跟後端API串接的範例嗎?
這個範例應該很重要!要好好練習~
這個範例從 GitHub 的 API 抓取最新的 Vue.js 提交數據並顯示為一個列表。您可以在兩個分支之間切換。

<script setup> 部分

<script setup>
import { ref, watchEffect } from 'vue'

// 定義 API URL 常數
const API_URL = `https://api.github.com/repos/vuejs/core/commits?per_page=3&sha=`

// 定義可選分支
const branches = ['main', 'v2-compat']

// 設定當前選擇的分支,預設為 'main'
const currentBranch = ref(branches[0])

// 設定提交記錄的狀態
const commits = ref([])

// 監聽 currentBranch 的變化,並抓取對應分支的提交記錄
watchEffect(async () => {
// 這個副作用會立即執行,並在 currentBranch.value 改變時重新執行
const url = `${API_URL}${currentBranch.value}`
// 抓取 API 數據並解析為 JSON,存入 commits
commits.value = await (await fetch(url)).json()
})

// 截斷長訊息只顯示第一行
function truncate(v) {
const newline = v.indexOf('\n')
return newline > 0 ? v.slice(0, newline) : v
}

// 格式化日期,將 'T' 和 'Z' 替換成空格
function formatDate(v) {
return v.replace(/T|Z/g, ' ')
}
</script>

<template> 部分

<template>
<!-- 標題 -->
<h1>Latest Vue Core Commits</h1>

<!-- 分支切換按鈕 -->
<template v-for="branch in branches">
<input type="radio"
:id="branch"
:value="branch"
name="branch"
v-model="currentBranch">
<label :for="branch">{{ branch }}</label>
</template>

<!-- 當前分支名稱 -->
<p>vuejs/vue@{{ currentBranch }}</p>

<!-- 提交記錄列表 -->
<ul v-if="commits.length > 0">
<li v-for="{ html_url, sha, author, commit } in commits" :key="sha">
<a :href="html_url" target="_blank" class="commit">{{ sha.slice(0, 7) }}</a>
- <span class="message">{{ truncate(commit.message) }}</span><br>
by <span class="author">
<a :href="author.html_url" target="_blank">{{ commit.author.name }}</a>
</span>
at <span class="date">{{ formatDate(commit.author.date) }}</span>
</li>
</ul>
</template>

<style> 部分

<style>
a {
text-decoration: none;
color: #42b883;
}
li {
line-height: 1.5em;
margin-bottom: 20px;
}
.author,
.date {
font-weight: bold;
}
</style>

當這段 Vue.js 代碼運行時,它會自動從 GitHub 的 API 抓取最新的 Vue.js 提交數據並顯示在網頁上。以下是這段代碼的處理邏輯:

  1. 引入 Vue.js 的 Composition API 函數
    • ref 用於創建響應式變數。
    • watchEffect 用於監聽變數的變化,並在變化時執行相關邏輯。
  2. 設置 API URL 和分支
    • API_URL 定義了 GitHub API 的基礎 URL,將用於請求提交數據。
    • branches 定義了一個包含可選擇分支的數組,包括 'main''v2-compat'
  3. 定義響應式變數
    • currentBranch 是一個響應式變數,用來存儲當前選擇的分支。初始化為 branches 的第一個元素,即 'main'
    • commits 是一個響應式變數,用來存儲從 API 獲取的提交數據,初始化為空數組。
  4. 使用 watchEffect 監聽 currentBranch 的變化
    • currentBranch 的值改變時,watchEffect 中的回調函數會自動執行。
    • 回調函數會構建請求的 URL,然後使用 fetch 從 GitHub API 獲取最新的提交數據。
    • 獲取到的數據會解析為 JSON 格式,並存儲到 commits 中。
  5. 定義輔助函數
    • truncate 用來截斷提交訊息,只顯示第一行。
    • formatDate 用來格式化日期,將 'T' 和 'Z' 替換為空格,使日期顯示更友好。
  6. 模板部分
    • 顯示標題 "Latest Vue Core Commits"。
    • 使用 v-for 迴圈渲染分支切換按鈕,每個按鈕綁定一個分支,並通過 v-model 綁定到 currentBranch
    • 顯示當前選擇的分支名稱。
    • 如果 commits 有數據,使用 v-for 迴圈顯示提交記錄。每條記錄包括提交的連結、截斷後的提交訊息、作者的名稱及其 GitHub 頁面連結、和格式化後的提交日期。
  7. 樣式部分
    • 設定連結的樣式,使其顏色為 Vue.js 主題顏色。
    • 設定列表項的行高和下邊距。
    • 設定作者和日期的字體加粗。

資料處理流程總結

  1. 初始化狀態:設定 API URL 和可選分支,並初始化響應式變數 currentBranchcommits
  2. 監聽變化:使用 watchEffect 監聽 currentBranch 的變化,一旦變化,重新抓取對應分支的提交數據。
  3. 抓取數據:當 currentBranch 改變時,構建請求 URL,使用 fetch 從 GitHub API 獲取提交數據,並解析為 JSON 存儲到 commits 中。
  4. 顯示數據:在模板中動態顯示當前選擇的分支和提交記錄,並使用輔助函數處理訊息和日期顯示。

這樣,整個應用就能夠自動更新並顯示最新的提交數據,並允許用戶在不同的分支之間切換。

vocus|新世代的創作平台
vocus|新世代的創作平台
以前都不知道原來github可以用API把原始碼撈出來~
這些資訊可以去這邊查看 https://docs.github.com/en/rest
以後可以對開源項目的活躍度跟版本追蹤~做做統計數據~
留言
avatar-img
卡關的人生
4會員
73內容數
分享生活趣事~
卡關的人生的其他內容
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
看更多
你可能也想看
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
前端和後端溝通,最常用就是 get 和 post 後端 先在 django 專案這邊的 views.py 內建立一個讓前端以 get 方法呼叫的 api function1 內的第一個參數是前端的 request,之後第二個參數第三個參數可以隨便你設,這倒是沒有限制 用 request.GET 這個
Thumbnail
前端和後端溝通,最常用就是 get 和 post 後端 先在 django 專案這邊的 views.py 內建立一個讓前端以 get 方法呼叫的 api function1 內的第一個參數是前端的 request,之後第二個參數第三個參數可以隨便你設,這倒是沒有限制 用 request.GET 這個
Thumbnail
在這篇文章中,我們將深入探討如何在 Vue 中使用組件,特別是如何透過事件傳遞數據、動態載入圖片,以及使用本地儲存功能。這些可能稍微複雜一點,讓我們一步一步來。
Thumbnail
在這篇文章中,我們將深入探討如何在 Vue 中使用組件,特別是如何透過事件傳遞數據、動態載入圖片,以及使用本地儲存功能。這些可能稍微複雜一點,讓我們一步一步來。
Thumbnail
這段代碼示範了如何從 GitHub 的 API 抓取最新的 Vue.js 提交數據並顯示在網頁上。這是後端 API 串接的一個範例,展示了如何動態地獲取和顯示數據。
Thumbnail
這段代碼示範了如何從 GitHub 的 API 抓取最新的 Vue.js 提交數據並顯示在網頁上。這是後端 API 串接的一個範例,展示了如何動態地獲取和顯示數據。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
記錄一下 API 串接的四種方式 www
Thumbnail
記錄一下 API 串接的四種方式 www
Thumbnail
講完 get 來講 post,那這兩個 call api 的方法有什麼差別呢?先記得一個原則,要傳遞機密的資料用 post,如果要傳遞的參數被別人知道也無所謂就用 get post 是傳遞資料到後台,資料不會顯示在 url 上,get 是傳遞參數到後台,參數會直接顯示在 url 上和後端的終端上,像
Thumbnail
講完 get 來講 post,那這兩個 call api 的方法有什麼差別呢?先記得一個原則,要傳遞機密的資料用 post,如果要傳遞的參數被別人知道也無所謂就用 get post 是傳遞資料到後台,資料不會顯示在 url 上,get 是傳遞參數到後台,參數會直接顯示在 url 上和後端的終端上,像
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
Composition API 是 Vue 3 的一組 API,允許使用導入的函數編寫 Vue 組件,涵蓋反應性 API、生命週期鉤子和依賴注入。它主要在單文件組件的 <script setup> 語法中使用。
Thumbnail
Composition API 是 Vue 3 的一組 API,允許使用導入的函數編寫 Vue 組件,涵蓋反應性 API、生命週期鉤子和依賴注入。它主要在單文件組件的 <script setup> 語法中使用。
Thumbnail
嗨,各位開發者!現代 Web 開發越來越傾向於前後端分離,使得前端框架和後端框架的協同工作變得非常重要。在這篇文章中,我們將專注於兩個極受歡迎的框架 —— Gin 和 Vue.js,探討如何將它們整合起來,為你的用戶提供流暢的Web 體驗。
Thumbnail
嗨,各位開發者!現代 Web 開發越來越傾向於前後端分離,使得前端框架和後端框架的協同工作變得非常重要。在這篇文章中,我們將專注於兩個極受歡迎的框架 —— Gin 和 Vue.js,探討如何將它們整合起來,為你的用戶提供流暢的Web 體驗。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News