📖 Scenario: You are creating a simple Svelte app to understand how components help build user interfaces by breaking them into smaller parts.
🎯 Goal: Build a Svelte app with a main component and a child component that displays a greeting message. Learn how components work together as building blocks.
📋 What You'll Learn
Create a main Svelte component file named App.svelte
Create a child component file named Greeting.svelte
Pass a name prop from App.svelte to Greeting.svelte
Display the greeting message inside Greeting.svelte
Use component import and usage syntax correctly
💡 Why This Matters
🌍 Real World
Web apps use components to build complex interfaces by combining small, manageable parts.
💼 Career
Understanding components is essential for frontend development jobs using modern frameworks like Svelte, React, or Vue.
Progress0 / 4 steps
1
Create the child component Greeting.svelte
Create a Svelte component file named Greeting.svelte with a name prop and display the text Hello, {name}! inside a <h2> tag.
Svelte
Hint
Use export let name; to declare a prop in Svelte.
2
Set up the main component App.svelte
Create a Svelte component file named App.svelte. Import the Greeting component from ./Greeting.svelte. Create a variable userName with the value "Alice".
Svelte
Hint
Use import Greeting from './Greeting.svelte'; to import the child component.
3
Use the Greeting component in App.svelte
In App.svelte, add the <Greeting /> component tag and pass the userName variable as the name prop.
Svelte
Hint
Use <Greeting name={userName} /> to pass the prop.
4
Add a wrapper element and export App component
In App.svelte, wrap the <Greeting /> component inside a <main> tag. This completes the main component structure.
Svelte
Hint
Use a <main> tag to wrap the child component for semantic structure.
Practice
(1/5)
1. Why are components considered the building blocks in Svelte?
easy
A. Because they break the app into small, manageable parts
B. Because they only handle CSS styling
C. Because they replace JavaScript functions
D. Because they are only used for routing
Solution
Step 1: Understand the role of components
Components divide the app into smaller parts that are easier to manage and understand.
Step 2: Recognize the benefits of components
This division helps in reusing code and updating parts without affecting the whole app.
Final Answer:
Because they break the app into small, manageable parts -> Option A
Quick Check:
Components = small parts [OK]
Hint: Components split app into pieces for easy management [OK]
Common Mistakes:
Thinking components only handle CSS
Believing components replace JavaScript functions
Assuming components are only for routing
2. Which of the following is the correct way to define a Svelte component file?
easy
A. A JavaScript file with .js extension only
B. Separate files for HTML, CSS, and JavaScript only
C. A CSS file with .css extension only
D. A file combining HTML, CSS, and JavaScript in one .svelte file
Solution
Step 1: Identify Svelte component structure
Svelte components combine HTML, CSS, and JavaScript in a single .svelte file for simplicity.
Step 2: Compare with other options
Other options separate concerns or use only one language, which is not how Svelte components work.
Final Answer:
A file combining HTML, CSS, and JavaScript in one .svelte file -> Option D
Quick Check:
Svelte = combined file [OK]
Hint: Svelte uses one file for HTML, CSS, JS [OK]
Common Mistakes:
Thinking Svelte requires separate files for each language
Confusing Svelte components with plain JS or CSS files
Assuming components are only JavaScript
3. Given this Svelte component code:
<script>
export let name = 'Friend';
</script>
<h1>Hello {name}!</h1>
What will be displayed if used as <Greeting name="Anna" />?
medium
A. Hello {name}!
B. Hello Friend!
C. Hello Anna!
D. Error: name not defined
Solution
Step 1: Understand prop passing in Svelte
The component exports a variable name with default 'Friend'. Passing name="Anna" overrides this default.
Step 2: Evaluate the rendered output
The {name} in the template will show 'Anna' because the prop was passed.
Final Answer:
Hello Anna! -> Option C
Quick Check:
Prop passed = displayed value [OK]
Hint: Passed props override defaults in Svelte [OK]
Common Mistakes:
Ignoring the passed prop and using default
Thinking {name} prints literally
Assuming an error occurs without explicit declaration
4. What is wrong with this Svelte component code?
<script>
let count = 0
function increment() {
count++
}
</script>
<button on:click="increment()">Click</button>
<p>Count: {count}</p>
medium
A. Missing semicolons cause error
B. Event handler syntax should not use quotes
C. count variable should be exported
D. Function increment must be async
Solution
Step 1: Check event handler syntax in Svelte
In Svelte, event handlers use on:event={handler} without quotes around the handler.
Step 2: Identify the error in code
The code uses on:click="increment()" with quotes, which is incorrect and causes a syntax error.
Final Answer:
Event handler syntax should not use quotes -> Option B
Quick Check:
Event handler = no quotes [OK]
Hint: Use curly braces, no quotes for event handlers [OK]
Common Mistakes:
Adding quotes around event handlers
Thinking semicolons are mandatory in Svelte
Believing variables must be exported to update
5. You want to create a reusable button component in Svelte that changes its label based on a passed prop and applies a CSS style only inside the component. Which of these is the best approach?
hard
A. Create a .svelte file combining HTML, CSS scoped to the component, and export a label prop
B. Write HTML and CSS in separate files and import them into a JavaScript file
C. Use global CSS and hardcode the label inside the component without props
D. Create a JavaScript function that returns HTML string with inline styles
Solution
Step 1: Understand Svelte component best practices
Svelte components combine HTML, CSS scoped locally, and JavaScript in one file, making them reusable and encapsulated.
Step 2: Match requirements to approach
Exporting a label prop allows dynamic text, and scoped CSS ensures styles don't leak outside the component.
Final Answer:
Create a .svelte file combining HTML, CSS scoped to the component, and export a label prop -> Option A
Quick Check:
Reusable + scoped CSS + props = Create a .svelte file combining HTML, CSS scoped to the component, and export a label prop [OK]
Hint: Use .svelte file with props and scoped CSS [OK]
Common Mistakes:
Using global CSS causing style conflicts
Hardcoding labels losing reusability
Separating files unnecessarily in Svelte
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.