📖 Scenario: You are building a simple Astro website that shows a welcome message and a button. You want the button to show an alert when clicked, but only after the page has fully loaded in the browser.
🎯 Goal: Create an Astro component that uses the client:load directive to load a small interactive script only after the page loads, so the alert button works correctly.
📋 What You'll Learn
Create an Astro component with a heading and a button
Add a script that shows an alert when the button is clicked
Use the client:load directive to load the script only after the page loads
💡 Why This Matters
🌍 Real World
Websites often need interactive parts that should only run after the page loads to improve speed and user experience.
💼 Career
Knowing how to use client directives in Astro helps build fast, modern websites with optimized loading behavior.
Progress0 / 4 steps
1
Create the Astro component with heading and button
Create an Astro component with a <h1> heading that says Welcome to Astro! and a <button> with the text Click me. Name the component file Welcome.astro.
Astro
Hint
Use standard HTML tags inside the Astro component.
2
Add a script to show alert on button click
Add a <script> tag inside the component that adds a click event listener to the button. When clicked, it should show an alert with the message Button clicked!.
Astro
Hint
Use document.querySelector to select the button and addEventListener to listen for clicks.
3
Use the client:load directive on the script
Modify the <script> tag to include the client:load directive so that the script runs only after the page has fully loaded in the browser.
Astro
Hint
Add client:load inside the opening <script> tag.
4
Complete the component with client:load script
Ensure the component includes the <h1> heading, the <button>, and the <script client:load> with the alert logic exactly as shown.
Astro
Hint
Check that all parts are included and the script uses client:load.
Practice
(1/5)
1. What does the client:load directive do in Astro?
easy
A. It delays loading a component until the entire page has loaded.
B. It loads the component immediately during server rendering.
C. It prevents the component from ever loading on the client.
D. It loads the component only when it becomes visible on screen.
Solution
Step 1: Understand the purpose of client:load
This directive delays the component's loading until after the full page load event.
Step 2: Compare with other loading strategies
Unlike immediate or lazy loading on visibility, client:load waits for the whole page to finish loading.
Final Answer:
It delays loading a component until the entire page has loaded. -> Option A
Quick Check:
client:load delays loading = A [OK]
Hint: Remember: client:load waits for full page load before running [OK]
Common Mistakes:
Confusing client:load with immediate loading
Thinking it loads on scroll or visibility
Assuming it prevents client loading entirely
2. Which is the correct self-closing syntax to use client:load on a component named MyWidget?
easy
A.
B.
C.
D.
Solution
Step 1: Recall Astro directive syntax
Astro directives use colon syntax like client:load as an attribute on components.
Step 2: Check valid self-closing tag usage
Using <MyWidget client:load /> is valid and concise for components without children.
Final Answer:
<MyWidget client:load /> -> Option D
Quick Check:
Correct directive syntax = A [OK]
Hint: Use colon syntax exactly: client:load [OK]
Common Mistakes:
Replacing colon with camelCase or dash
Omitting the colon
Using incorrect closing tags
3. Given this Astro component usage:
<MyWidget client:load />
What will happen when the page loads?
medium
A. MyWidget renders immediately during server-side rendering.
B. MyWidget loads as soon as it scrolls into view.
C. MyWidget loads only after the entire page finishes loading in the browser.
D. MyWidget never loads on the client side.
Solution
Step 1: Understand client:load behavior
The client:load directive delays loading the component until after the full page load event in the browser.
Step 2: Compare with other loading triggers
It does not load immediately or on scroll, but waits for the page to fully load.
Final Answer:
MyWidget loads only after the entire page finishes loading in the browser. -> Option C
Quick Check:
client:load triggers after full page load = D [OK]
Hint: client:load waits for full page load before running component [OK]
Common Mistakes:
Thinking it loads during server rendering
Confusing with lazy loading on scroll
Assuming it never loads on client
4. You wrote this code but the component loads immediately, not after page load:
<MyWidget client-load />
What is the error?
medium
A. You must import client:load from Astro first.
B. The directive should be client:load with a colon, not a dash.
C. The component must be wrapped in a <client:load> tag.
D. The component cannot be self-closing.
Solution
Step 1: Identify incorrect directive syntax
The directive uses a dash client-load instead of the required colon client:load.
Step 2: Understand Astro directive rules
Astro directives must use colon syntax exactly; dashes are invalid and ignored.
Final Answer:
The directive should be client:load with a colon, not a dash. -> Option B
Quick Check:
Correct directive syntax uses colon = C [OK]
Hint: Check for colon, not dash, in directive name [OK]
Common Mistakes:
Using dash instead of colon in directive
Thinking directives need imports
Believing self-closing tags cause loading issues
5. You want to add a chat widget that should only load after the page fully loads to avoid slowing initial load. Which is the best way to do this in Astro?
hard
A. Use <ChatWidget client:load /> to delay loading until after page load.
B. Use <ChatWidget client:idle /> to load when browser is idle.
C. Use <ChatWidget client:visible /> to load when visible on screen.
D. Render <ChatWidget /> normally without directives.
Solution
Step 1: Identify the requirement
The chat widget should load only after the full page load to keep initial load fast.
Step 2: Match directive to requirement
client:load delays loading until after the page fully loads, fitting the need perfectly.
Step 3: Compare other options
client:idle waits for browser idle, client:visible waits for scroll visibility, and no directive loads immediately.
Final Answer:
Use <ChatWidget client:load /> to delay loading until after page load. -> Option A
Quick Check:
Delay until full page load = client:load = B [OK]
Hint: Use client:load to delay widget until after full page load [OK]
Common Mistakes:
Choosing client:idle or client:visible which load at different times
Not using any directive causing immediate load
Misunderstanding when client:load triggers
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.