Astro - 基礎入門3. Islands Architecture (孤島架構)

更新 發佈閱讀 5 分鐘

第三課:Astro Islands —— 混合開發與互動性

核心觀念:預設 0 JS

Astro 就像一個「大洋」,預設所有組件都是靜態的 HTML(沒有 JS)。如果你需要互動(如:彈窗、購物車、即時搜尋),你就在大洋中丟入一個「孤島 (Island)」。這些孤島可以使用你喜歡的框架:React, Vue, Svelte 或 Preact。

1. 手把手實作:加入 React 框架

首先,我們需要讓 Astro 支援 React。請在終端機執行:

npx astro add react

(一律選 Yes,它會自動幫你修改 astro.config.mjs 並安裝依賴)

2. 手把手實作:建立一個互動組件

建立一個簡單的「按讚計數器」。 請建立 src/components/LikeButton.jsx

import { useState } from 'react'

export default function LikeButton() {
const [likes, setLikes] = useState(0)

return (
<div
style={{ border: '1px solid #ccc', padding: '1rem', marginTop: '1rem' }}
>
<p>這篇文章對你有幫助嗎?</p>
<button onClick={() => setLikes(likes + 1)}>❤️ 點讚 ({likes})</button>
</div>
)
}

3. 核心關鍵:客戶端指令 (Client Directives)

這是 Astro 的靈魂。請在你的 src/pages/posts/[id].astro 裡匯入並使用它:

---
import { getCollection, render } from 'astro:content';
import BaseLayout from '../../layouts/BaseLayout.astro';
import LikeButton from '../../components/LikeButton.jsx'; // 匯入 React 組件

export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map(post => ({
params: { id: post.id },
props: { post },
}));
}

const { post } = Astro.props;
const { Content } = await render(post);
---
<BaseLayout pageTitle={post.data.title}>
<Content />

<hr />
{/* 重點就在這裡的 client:visible */}
<LikeButton client:visible />
</BaseLayout>

為什麼要寫 client:visible

  • 如果不寫指令:React 組件會被渲染成靜態 HTML,按鈕點了沒反應(性能最強,0 JS)。
  • client:load:頁面一載入就執行 JS。
  • client:visible:當使用者捲動到這個按鈕時,瀏覽器才下載並執行該組件的 JS(極致優化)。

📝 第三課練習題

任務目標: 建立一個動態的「顯示/隱藏」詳細資訊組件。

  1. 使用你熟悉的框架(React, Vue 或純 JS 的 <script> 標籤,建議練習 React)。
  2. 建立一個 DescriptionControl.jsx 組件。
  3. 該組件預設只顯示一段文字的前 20 個字,點擊「閱讀更多」按鈕後才顯示完整內容。
  4. 將這個組件放在你的 about.astro 頁面中。
  5. 實驗題: 試著在瀏覽器開發者工具 (F12) 的 Network 分頁觀察。當你使用 client:visible 時,重新整理頁面,JS 檔案是否是在你「捲動到組件位置」時才出現?

第三課練習題實作放在下一篇 ( 我也是第一次學習,自己試作,不一定是對的喔👍 )

留言
avatar-img
李昀瑾的沙龍
0會員
37內容數
李昀瑾的沙龍的其他內容
2026/01/10
Astro - 基礎入門3.第三課練習題實作
2026/01/10
Astro - 基礎入門3.第三課練習題實作
2026/01/09
題目 任務目標: 實作「動態路由」,讓點擊列表後能看到文章內容。 這在 Astro 中是非常經典的步驟,請嘗試完成以下開發:
2026/01/09
題目 任務目標: 實作「動態路由」,讓點擊列表後能看到文章內容。 這在 Astro 中是非常經典的步驟,請嘗試完成以下開發:
2026/01/09
Astro 5.1.x 的重點在於如何管理內容 以前我們可能要手動 fs.readFileSync,現在我們用 Content Layer API,它能讓你的 Markdown 檔案擁有強大的型別檢查 (Type Safety)。 第二課:Content Collections (內容集) ——
Thumbnail
2026/01/09
Astro 5.1.x 的重點在於如何管理內容 以前我們可能要手動 fs.readFileSync,現在我們用 Content Layer API,它能讓你的 Markdown 檔案擁有強大的型別檢查 (Type Safety)。 第二課:Content Collections (內容集) ——
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
Nuxt.js 是以 Vue 為基底所建構的框架,透過 Nuxt.js,我們能夠更輕鬆地開發靜態頁面 (Static Site)、操作體驗良好的單頁式網站 (SPA)、甚至是顧及 SEO 的伺服器端渲染 (SSR) 網站。
Thumbnail
Nuxt.js 是以 Vue 為基底所建構的框架,透過 Nuxt.js,我們能夠更輕鬆地開發靜態頁面 (Static Site)、操作體驗良好的單頁式網站 (SPA)、甚至是顧及 SEO 的伺服器端渲染 (SSR) 網站。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News