iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
影片教學

Nuxt 3 快速入門系列 第 15

[影片教學] Nuxt 3 資料獲取 (Data Fetching)

  • 分享至 

  • xImage
  •  

Yes

👆建議你可以使用影片子母畫面功能或全螢幕播放來獲得最佳的觀賞體驗,👇下方是本篇教學的相關筆記。


建立 Server API

server/api 目錄下建立一個檔案 ./server/api/about.get.js

export default defineEventHandler(() => {
  console.log('接收到 API 請求 /api/about')

  return {
    name: 'Ryan',
    gender: '男',
    email: 'ryanchien8125@gmail.com'
  }
})

發送 [GET] 方法的請求,測試網站下的 /api/about 網址路徑。

使用路由首頁

pages 目錄下建立一個檔案 ./pages/index.vue

<template>
  <div class="bg-white py-24">
    <div class="flex flex-col items-center">
      <h1 class="text-6xl font-semibold text-gray-800">這裡是首頁</h1>
      <div class="my-8 flex flex-col space-y-2">
        <NuxtLink to="/about/fetch">前往 /about/fetch</NuxtLink>
        <NuxtLink to="/about/useAsyncData">前往 /about/useAsyncData</NuxtLink>
        <NuxtLink to="/about/useFetch">前往 /about/useFetch</NuxtLink>
      </div>
    </div>
  </div>
</template>

修改 app.vue 頁面:

 <template>
   <div>
     <NuxtPage />
   </div>
 </template>

在頁面中使用 $fetch

pages/about 目錄下建立一個檔案 ./pages/about/fetch.vue

<template>
  <div class="my-24 flex flex-col items-center">
    <span class="text-xl text-gray-400">[$fetch]</span>
    <span class="my-2 text-2xl text-gray-600">回傳資料:</span>
    <p class="my-4 text-xl font-semibold text-blue-500">{{ data }}</p>
  </div>
</template>

<script setup>
const data = await $fetch('/api/about')
</script>

在頁面中使用 useAsyncData

pages/about 目錄下建立一個檔案 ./pages/about/useAsyncData.vue

<template>
  <div class="my-24 flex flex-col items-center">
    <span class="text-xl text-gray-400">[useAsyncData]</span>
    <span class="my-2 text-2xl text-gray-600">回傳資料:</span>
    <p class="my-4 text-xl font-semibold text-blue-500">{{ data }}</p>
  </div>
</template>

<script setup>
const { data } = await useAsyncData('about', () => $fetch('/api/about'))
</script>

在頁面中使用 useFetch

pages/about 目錄下建立一個檔案 ./pages/about/useFetch.vue

<template>
  <div class="my-24 flex flex-col items-center">
    <span class="text-xl text-gray-400">[useFetch]</span>
    <span class="my-2 text-2xl text-gray-600">回傳資料:</span>
    <p class="my-4 text-xl font-semibold text-blue-500">{{ data }}</p>
  </div>
</template>

<script setup>
const { datar } = await useFetch('/api/about')
</script>

使用 useFetch 的回傳值,修改 ./pages/about/useFetch.vue 檔案:

<template>
  <div class="my-24 flex flex-col items-center">
    <span class="text-xl text-gray-400">[useFetch]</span>
    <span class="mt-4 text-xl text-sky-500">請求狀態: {{ status }}</span>
    <span v-if="error" class="mt-4 text-xl text-rose-500">發生錯誤: {{ error }}</span>
    <span class="my-2 text-2xl text-gray-600">回傳資料:</span>
    <p v-if="pending" class="my-4 text-xl font-semibold text-blue-500">請求處理中...</p>
    <p v-else class="my-4 text-xl font-semibold text-blue-500">{{ data }}</p>

    <button
      class="mt-6 rounded-md bg-blue-500 px-6 py-3 text-white hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-offset-2"
      @click="refresh"
    >
      重新獲取資料
    </button>
  </div>
</template>

<script setup>
const { data, pending, refresh, error, status } = await useFetch('/api/about')
</script>

感謝大家的閱讀,歡迎大家給予建議與討論,也請各位大大鞭小力一些:)
如果對這個 Nuxt 3 系列感興趣,可以訂閱接收通知,也歡迎分享給喜歡或正在學習 Nuxt 3 的夥伴。

範例程式碼

參考資料


上一篇
[影片教學] Nuxt 3 渲染模式 (Rendering Modes)
下一篇
[影片教學] Nuxt 3 狀態管理 (State Management)
系列文
Nuxt 3 快速入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言