📖 Scenario: You are building a simple Svelte component that shows a message based on the current hour of the day. This is like a digital greeting card that changes its message depending on the time.
🎯 Goal: Create a Svelte component that uses {#if}, {:else if}, and {:else} blocks to display different greetings for morning, afternoon, evening, and night.
📋 What You'll Learn
Create a variable hour with a number representing the current hour (0 to 23).
Create a variable morningStart set to 6 and afternoonStart set to 12.
Use {#if}, {:else if}, and {:else} blocks to show:
Good morning! if hour is between morningStart and afternoonStart - 1.
Good afternoon! if hour is between afternoonStart and 18.
Good evening! if hour is between 19 and 21.
Good night! for all other hours.
💡 Why This Matters
🌍 Real World
Time-based greetings are common in apps and websites to personalize user experience depending on the time of day.
💼 Career
Understanding conditional rendering in Svelte is essential for building interactive user interfaces that respond to data changes.
Progress0 / 4 steps
1
Set up the hour variable
Create a variable called hour and set it to 14 inside a <script> tag.
Svelte
Hint
Use let hour = 14; inside the <script> tag.
2
Add morning and afternoon start variables
Inside the <script> tag, add two variables: morningStart set to 6 and afternoonStart set to 12.
Svelte
Hint
Declare morningStart and afternoonStart with the given values.
3
Add if, else if, and else blocks for greetings
Below the <script> tag, use Svelte's {#if}, {:else if}, and {:else} blocks to show these messages based on hour: Good morning! if hour is between morningStart and afternoonStart - 1, Good afternoon! if hour is between afternoonStart and 18, Good evening! if hour is between 19 and 21, and Good night! for all other hours.
Svelte
Hint
Use Svelte's {#if}, {:else if}, and {:else} blocks with the exact conditions and messages.
4
Complete the Svelte component
Make sure the entire Svelte component includes the <script> tag with variables and the conditional blocks below it exactly as described.
Svelte
Hint
Review the full component to ensure all parts are included and correct.
Practice
(1/5)
1. In Svelte, which block is used to check a second condition if the first {#if} condition is false?
easy
A. {:else}
B. {#each}
C. {:else if}
D. {#await}
Solution
Step 1: Understand the purpose of {#if} and {:else if}
The {#if} block checks the first condition. If it is false, {:else if} allows checking another condition.
Step 2: Identify the correct block for a second condition
{:else if} is specifically designed to check additional conditions after the first fails.
Final Answer:
{:else if} -> Option C
Quick Check:
Second condition check = {:else if} [OK]
Hint: Use {:else if} to test another condition after {#if} fails [OK]
Common Mistakes:
Using {:else} to check a condition instead of fallback
Confusing {#each} with conditional blocks
Trying to use {#await} for conditions
2. Which of the following is the correct syntax for an else-if block in Svelte?
easy
A. {:elseif condition}
B. {:else if condition}
C. {:else-if condition}
D. {:else if (condition)}
Solution
Step 1: Recall Svelte syntax for else-if
Svelte uses {:else if} followed by the condition without parentheses.
Step 2: Compare options to correct syntax
{:else if condition} matches the correct syntax exactly: {:else if condition}
Final Answer:
{:else if condition} -> Option B
Quick Check:
Correct else-if syntax = {:else if condition} [OK]
Hint: Remember: space between else and if, no parentheses [OK]
Common Mistakes:
Writing {:elseif} as one word
Adding parentheses around condition
Using hyphen in else-if
3. What will be rendered by this Svelte code?
{`\n{#if score >= 90}\n
Excellent
\n{:else if score >= 60}\n
Good
\n{:else}\n
Try again
\n{/if}`}
medium
A.
Good
B.
Try again
C.
Excellent
D. No output
Solution
Step 1: Evaluate the first condition
score is 75, which is not >= 90, so the first {#if} block is false.
Step 2: Evaluate the else-if condition
score is 75, which is >= 60, so {:else if} block is true and renders <p>Good</p>.
Final Answer:
<p>Good</p> -> Option A
Quick Check:
score 75 triggers else-if block = Good [OK]
Hint: Check conditions top-down; first true block renders [OK]
Common Mistakes:
Assuming all blocks render instead of only one
Misreading the score value
Confusing else-if with else
4. Identify the error in this Svelte code snippet:
{`{#if isActive}\n
Active
\n{:else if}\n
Inactive
\n{/if}`}
medium
A. Missing condition after {:else if}
B. Incorrect closing tag {/if}
C. Cannot use {:else if} after {#if}
D. Missing colon before else
Solution
Step 1: Check {:else if} syntax
The {:else if} block requires a condition to follow it, but none is provided here.
Step 2: Confirm other parts are correct
The {#if} and {/if} tags are correctly placed, and {:else if} is allowed after {#if}.
Final Answer:
Missing condition after {:else if} -> Option A
Quick Check:
{:else if} needs a condition [OK]
Hint: Always add a condition after {:else if} [OK]
Common Mistakes:
Leaving {:else if} without condition
Confusing {:else} with {:else if}
Misplacing {/if} tag
5. Given this Svelte code:
{`\n{#if status === 'loading'}\n
Loading...
\n{:else if status === 'success'}\n
Data loaded
\n{:else if status === 'error'}\n
Error occurred
\n{:else}\n
Idle
\n{/if}`}
What will be displayed if status is an empty string?
hard
A.
Loading...
B.
Data loaded
C.
Error occurred
D.
Idle
Solution
Step 1: Check each condition against empty string
status is '', so none of the conditions 'loading', 'success', or 'error' match.
Step 2: Use {:else} block as fallback
Since no conditions match, the {:else} block runs, rendering <p>Idle</p>.
Final Answer:
<p>Idle</p> -> Option D
Quick Check:
Empty string triggers else block = Idle [OK]
Hint: If no conditions match, {:else} block runs [OK]
Common Mistakes:
Assuming empty string matches a condition
Forgetting {:else} fallback
Mixing up else-if and else blocks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.