vocus logo

方格子 vocus

Astro - 基礎入門1.第一課練習題實作

更新 發佈閱讀 8 分鐘

題目

  1. src/pages/ 下建立一個新檔案 about.astro
  2. 匯入並使用剛才寫好的 BaseLayout
  3. --- 區塊內定義一個對象 identity,包含 firstNamehobbies(數組)。
  4. 在頁面上使用 {identity.firstName} 顯示名字。
  5. 使用 {identity.hobbies.map()} 把你的愛好列印成一個列表。
  6. 挑戰題: 試著在 BaseLayout 裡增加一個變數,讓每個頁面的背景顏色可以透過 Props 從 index.astroabout.astro 傳進去(例如:index 是白色,about 是淺灰色)。

目前專案結構

📁 .astro/
📁 .vscode/
📁 node_modules/
📁 public/
   └─ favicon.svg
📁 src/
   ├─ 📁 layouts/
   │      └─ BaseLayout.astro

   └─ 📁 pages/
      └─ index.astro
.gitignore
astro.config.mjs
package-lock.json
package.json
README.md
tsconfig.json

1_新增 src/pages/about.astro

---
import BaseLayout from '../layouts/BaseLayout.astro'
const pageTitle = '關於我'
const identity = {
  firstName: '小明',
  hobbies: ['reading', 'gaming', 'coding'],
}
---

<BaseLayout pageTitle={pageTitle}>
  <h2>{identity.firstName}</h2>
  <h3>我的愛好</h3>
  <ul>
    {identity.hobbies.map((x) => <li>{x}</li>)}
  </ul>
</BaseLayout>

2_挑戰題

2_1. 修改 src/layouts/BaseLayout.astro
新增 pageName 變數作為判斷
新增class .bg-white.bg-gray

---
const { pageTitle, pageName } = Astro.props
const _bodyClass =
  pageName == 'index' ? 'bg-white' : pageName == 'about' ? 'bg-gray' : ''
---

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width" />
    <title>{pageTitle}</title>
    <style>
      body {
        font-family: sans-serif;
        line-height: 1.6;
        max-width: 800px;
        margin: 0 auto;
        padding: 2rem;
      }
      nav {
        border-bottom: 1px solid #ccc;
        padding-bottom: 1rem;
        margin-bottom: 2rem;
      }
      a {
        margin-right: 1rem;
        text-decoration: none;
        color: #0070f3;
      }
      .bg-white {
        background: white;
      }
      .bg-gray {
        background: rgb(235, 235, 235);
      }
    </style>
  </head>

  <body class={_bodyClass}>
    <nav>
      <a href="/">首頁</a>
      <a href="/about">關於我</a>
    </nav>

    <h1>{pageTitle}</h1>

    <slot />

    <footer>
      <hr />
      <p>© 2024 我的 Astro 學習筆記</p>
    </footer>
  </body>
</html>

2_2. 修改 src/pages/index.astro
<BaseLayout> 加入 pageName="index"

---
import BaseLayout from '../layouts/BaseLayout.astro'
const pageTitle = '首頁'
const skills = ['Astro', 'TypeScript', 'React']
---
<BaseLayout pageTitle={pageTitle} pageName="index">
  <h2>歡迎來到我的 Astro 課程</h2>
  <p>這是我的第一個頁面,正在練習如何使用 Layout。</p>
  <ul>
    {skills.map((x) => <li>{x}</li>)}
  </ul>
</BaseLayout>

2_3. 修改 src/pages/index.astro
<BaseLayout> 加入 pageName="about"

---
import BaseLayout from '../layouts/BaseLayout.astro'
const pageTitle = '關於我'
const identity = {
  firstName: '小明',
  hobbies: ['reading', 'gaming', 'coding'],
}
---
<BaseLayout pageTitle={pageTitle} pageName="about">
  <h2>{identity.firstName}</h2>
  <h3>我的愛好</h3>
  <ul>
    {identity.hobbies.map((x) => <li>{x}</li>)}
  </ul>
</BaseLayout>

執行結果

npm run dev 後,會顯示 http://localhost:4321,使用這串網址可以查看效果

留言
avatar-img
李昀瑾的沙龍
0會員
32內容數
李昀瑾的沙龍的其他內容
2026/01/08
第一課:Astro 的靈魂 —— 組件與佈局 (Layouts) 在 Astro 中,網頁是由一個個 .astro 檔案組成的。這類檔案最大的特色是:預設不發送任何 JavaScript 到瀏覽器,所以速度極快。
2026/01/08
第一課:Astro 的靈魂 —— 組件與佈局 (Layouts) 在 Astro 中,網頁是由一個個 .astro 檔案組成的。這類檔案最大的特色是:預設不發送任何 JavaScript 到瀏覽器,所以速度極快。
2026/01/07
Astro - 基礎入門 1 ~ 6 第一階段:環境初始化與核心觀念 第二階段:路由與佈局 (Layouts) 第三階段:核心進階 - Content Layer API (Astro 5 重點) 第四階段:孤島架構 (Islands) 與組件整合 第五階段:渲染模式與資料獲取 第六階段:這篇還沒有
2026/01/07
Astro - 基礎入門 1 ~ 6 第一階段:環境初始化與核心觀念 第二階段:路由與佈局 (Layouts) 第三階段:核心進階 - Content Layer API (Astro 5 重點) 第四階段:孤島架構 (Islands) 與組件整合 第五階段:渲染模式與資料獲取 第六階段:這篇還沒有
2026/01/06
✅ 是的,如果你想將網站部署到網路上分享,一定要註冊帳號。 以下是幾個為什麼建議現在就去註冊的原因: 1. 為了拿到「網址」...
2026/01/06
✅ 是的,如果你想將網站部署到網路上分享,一定要註冊帳號。 以下是幾個為什麼建議現在就去註冊的原因: 1. 為了拿到「網址」...
看更多
你可能也想看
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
Kotlin 是什麼?為什麼值得學習? Kotlin 是由 JetBrains 開發的現代化、靜態型別程式語言,具備簡潔、安全、與 Java 完全互通的特性。自 2017 年被 Google 宣布為 Android 開發首選語言後,Kotlin 已廣泛應用於行動、後端、前端與跨平台開發領域。
Thumbnail
Kotlin 是什麼?為什麼值得學習? Kotlin 是由 JetBrains 開發的現代化、靜態型別程式語言,具備簡潔、安全、與 Java 完全互通的特性。自 2017 年被 Google 宣布為 Android 開發首選語言後,Kotlin 已廣泛應用於行動、後端、前端與跨平台開發領域。
Thumbnail
一、Kotlin 是什麼? Kotlin 是一種現代化、靜態型別(statically-typed)的程式語言,由 JetBrains 公司於 2011 年開發。JetBrains 同時也是知名 IDE 工具 IntelliJ IDEA 的開發者,因此 Kotlin 在開發體驗上具備高度整合性。
Thumbnail
一、Kotlin 是什麼? Kotlin 是一種現代化、靜態型別(statically-typed)的程式語言,由 JetBrains 公司於 2011 年開發。JetBrains 同時也是知名 IDE 工具 IntelliJ IDEA 的開發者,因此 Kotlin 在開發體驗上具備高度整合性。
Thumbnail
AI專案週期的五個階段(來源:Solidigm) 1. 資料攝取(Data Ingest) I/O特性:大量順序寫入活動 資料類型:原始資料(LLM的網站資料、自動駕駛的LIDAR資料、醫療影像、音頻記錄等) 儲存需求:高順序寫入吞吐量 2. 資料準備(Data Preparation)
Thumbnail
AI專案週期的五個階段(來源:Solidigm) 1. 資料攝取(Data Ingest) I/O特性:大量順序寫入活動 資料類型:原始資料(LLM的網站資料、自動駕駛的LIDAR資料、醫療影像、音頻記錄等) 儲存需求:高順序寫入吞吐量 2. 資料準備(Data Preparation)
Thumbnail
前情提要:從前端到後端的橋樑 前面了解 React、Vue 或其他前端框架,但當你需要與資料庫溝通、處理使用者輸入或串接第三方服務時,就需要一個能處理 HTTP 請求的後端框架。這時,Express + Node.js 就是最輕量、最易入門的選擇。 Express 是什麼?為什麼選它? Exp
Thumbnail
前情提要:從前端到後端的橋樑 前面了解 React、Vue 或其他前端框架,但當你需要與資料庫溝通、處理使用者輸入或串接第三方服務時,就需要一個能處理 HTTP 請求的後端框架。這時,Express + Node.js 就是最輕量、最易入門的選擇。 Express 是什麼?為什麼選它? Exp
Thumbnail
學習如何使用Python編寫一個數字猜謎遊戲,從中學習隨機數生成、使用者輸入、條件判斷和迴圈等程式設計基礎概念。
Thumbnail
學習如何使用Python編寫一個數字猜謎遊戲,從中學習隨機數生成、使用者輸入、條件判斷和迴圈等程式設計基礎概念。
Thumbnail
在學習 Python 的初期,我們常常會從一些小小的專案開始練習。今天要帶你做的,就是其中一個經典的入門練習——簡單計算機。 這個練習的目標是:讓程式接收兩個數字和一個運算符(+、-、*、/),並回傳正確的計算結果。 可以在Visual Studio Code中執行 #!/usr/bin/
Thumbnail
在學習 Python 的初期,我們常常會從一些小小的專案開始練習。今天要帶你做的,就是其中一個經典的入門練習——簡單計算機。 這個練習的目標是:讓程式接收兩個數字和一個運算符(+、-、*、/),並回傳正確的計算結果。 可以在Visual Studio Code中執行 #!/usr/bin/
Thumbnail
本篇以初學者角度詳細說明,透過簡單幾個步驟,就能創建屬於自己的app。
Thumbnail
本篇以初學者角度詳細說明,透過簡單幾個步驟,就能創建屬於自己的app。
Thumbnail
在本篇文章點會以我的觀點和歷程來描述透過Python轉職過程、轉職後的工作選項和薪資狀況,並分享我知道的進修機構和學習單位,提供讀者參考。
Thumbnail
在本篇文章點會以我的觀點和歷程來描述透過Python轉職過程、轉職後的工作選項和薪資狀況,並分享我知道的進修機構和學習單位,提供讀者參考。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News