Practice and reinforce the concepts from Lesson 5
$:
syntaxIn this activity, you will learn about Svelte's reactivity system using reactive declarations and reactive statements. You'll practice creating counters, automatic calculations, and implementing limits with alerts using Svelte's reactive features.
:bulb: Tip :bulb: The Svelte REPL automatically saves your work, but it's good practice to manually save before closing the browser tab!
Time: 10 minutes
Svelte REPL - Remove all the codes before doing exercise
Let's create a simple increment and decrement button that will increase and decrease the number value.
Instructions:
number
and set its value to 0number
inside a <p>
tag<button>
tagdecrease()
that subtracts 1 from numberon:click
event to call the decrease function:bulb: Tip :wrench: Svelte automatically updates the DOM when variables change - no need to manually refresh!
<script>
let number = 0;
function decrease() \{
number = number - 1;
\}
function increase() \{
number = number + 1;
\}
</script>
<p>\{number\}</p>
<button on:click=\{decrease\}>Decrease</button>
<button on:click=\{increase\}>Increase</button>
If you done it correctly, the output should look like this:
Time: 15 minutes
Continue with Exercise 1 - Let's make a multiplication of 6 that updates automatically when the number changes.
Instructions:
multiply
variablemultiply
to be number * 6
<p>
tag:bulb: Tip :dart: Use
$:
for reactive declarations and statements in Svelte. This tells Svelte to re-run the code whenever its dependencies change!
<script>
let number = 0;
// Reactive declaration
$: multiply = number * 6;
// Reactive statements for limits
$: if (number < 0) \{
alert("Cannot go below zero");
number = 0;
\}
$: if (number > 12) \{
alert("Cannot go above 12, resetting to 0");
number = 0;
\}
function decrease() \{
number = number - 1;
\}
function increase() \{
number = number + 1;
\}
</script>
<p>\{number\} x 6 = \{multiply\}</p>
<button on:click=\{decrease\}>Decrease</button>
<button on:click=\{increase\}>Increase</button>
If you've done it correctly, it should look like this:
Time: 20 minutes
Continue with Exercise 2 - Let's make it so the user can multiply two different numbers instead of one.
Instructions:
number2
multiply
reactive variable to use number * number2
||
(or) operator for both numbers:bulb: Tip :bulb: Use HTML entities for button symbols:
<
for < (Decrement)>
for > (Increment)<script>
let number = 0;
let number2 = 0;
// Reactive declaration for multiplication
$: multiply = number * number2;
// Reactive statements for limits on both numbers
$: if (number < 0 || number2 < 0) \{
alert("Cannot go below zero");
if (number < 0) number = 0;
if (number2 < 0) number2 = 0;
\}
$: if (number > 12 || number2 > 12) \{
alert("Cannot go above 12, resetting to 0");
if (number > 12) number = 0;
if (number2 > 12) number2 = 0;
\}
function decrease1() \{
number = number - 1;
\}
function increase1() \{
number = number + 1;
\}
function decrease2() \{
number2 = number2 - 1;
\}
function increase2() \{
number2 = number2 + 1;
\}
</script>
<p>\{number\} x \{number2\} = \{multiply\}</p>
<div>
Number 1:
<button on:click=\{decrease1\}><</button>
\{number\}
<button on:click=\{increase1\}>></button>
</div>
<div>
Number 2:
<button on:click=\{decrease2\}><</button>
\{number2\}
<button on:click=\{increase2\}>></button>
</div>
The output should look like this:
Make sure your Svelte Reactivity projects include:
$:
syntaxReactivity not working?
$:
before reactive declarationsAlerts showing multiple times?
Buttons not responding?
on:click
syntax is correct:bulb: Tip :mag: Use the browser console to debug any JavaScript errors in your Svelte code!
:warning: Warning :alarm_clock: Total Activity Time: 45 minutes
- Exercise One: 10 minutes
- Exercise 2: 15 minutes
- Exercise 3: 20 minutes
When you have completed your "Svelte Reactivity" projects, submit them using the link below:
:information_source: Info :emoji: Submit Your Projects Here
Make sure to test all reactive features and limit checking before submitting!
Code Review: YouTube Tutorial