构建你的第一个 Astro 岛
使用 Preact 组件通过随机选择的欢迎消息来迎接你的访客!
¥Use a Preact component to greet your visitors with a randomly-selected welcome message!
Get ready to…
-
将 Preact 添加到你的 Astro 项目
-
在你的主页上包含 Astro 岛(Preact
.jsx
组件) -
使用
client:
指令使群岛具有交互性
将 Preact 添加到你的 Astro 项目
Section titled 将 Preact 添加到你的 Astro 项目¥Add Preact to your Astro project
-
If it’s running, quit the dev server to have access to the terminal (keyboard shortcut: Ctrl + C).
-
Add the ability to use Preact components in your Astro project with a single command:
-
Follow the command line instructions to confirm adding Preact to your project.
包含 Preact 问候横幅
Section titled 包含 Preact 问候横幅¥Include a Preact greeting banner
该组件将采用一组问候消息作为属性,并随机选择其中一条作为欢迎消息显示。用户可以单击按钮来获取新的随机消息。
¥This component will take an array of greeting messages as a prop and randomly select one of them to show as a welcome message. The user can click a button to get a new random message.
-
Create a new file in
src/components/
namedGreeting.jsx
Note the
.jsx
file extension. This file will be written in Preact, not Astro. -
Add the following code to
Greeting.jsx
: -
Import and use this component on your Home page
index.astro
.Check the preview in your browser: you should see a random greeting, but the button won’t work!
-
Add a second
<Greeting />
component with theclient:load
directive. -
Revisit your page and compare the two components. The second button works because the
client:load
directive tells Astro to send and rerun its JavaScript on the client when the page loads, making the component interactive. This is called a hydrated component. -
Once the difference is clear, remove the non-hydrated Greeting component.
¥Analyze the Pattern
还有其他 client:
指令需要探索。每个都在不同的时间将 JavaScript 发送到客户端。例如,client:visible
仅当组件在页面上可见时才发送该组件的 JavaScript。
¥There are other client:
directives to explore. Each sends the JavaScript to the client at a different time. client:visible
, for example, will only send the component’s JavaScript when it is visible on the page.
考虑具有以下代码的 Astro 组件:
¥Consider an Astro component with the following code:
-
五个组件中的哪一个将是水合岛,将 JavaScript 发送到客户端?
-
两个
<PreactBanner />
组件在哪些方面相同?它们会在哪些方面有所不同? -
假设
SvelteCounter
组件显示一个数字并有一个增加该数字的按钮。如果你看不到网站的代码,只能看到实时发布的页面,你如何判断两个<SvelteCounter />
组件中哪一个使用了client:visible
?
测试你的知识
Section titled 测试你的知识¥Test your knowledge
对于以下每个组件,确定将发送到浏览器的内容:
¥For each of the following components, identify what will be sent to the browser:
<ReactCounter client:load />
<SvelteCard />
¥Checklist
¥Resources
Tutorials