Bird
Raised Fist0
Svelteframework~10 mins

Reactive statements ($:) in Svelte - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Reactive statements ($:)
Variable changes
↓
$: reactive statement runs
↓
Update dependent variables or run code
↓
UI updates automatically
↓
Wait for next change
When a variable changes, Svelte runs the reactive statement marked with $: to update dependent values or run code, then updates the UI automatically.
Execution Sample
Svelte
let count = 0;
$: doubled = count * 2;

function increment() {
  count += 1;
}
This code doubles the count reactively whenever count changes.
Execution Table
StepActioncountdoubledUI Update
1Initialize count0undefinedcount=0, doubled not set
2Reactive statement runs00doubled=0 shown
3Call increment()00UI shows count=0, doubled=0
4count += 110count updated, doubled stale
5Reactive statement runs12doubled updated to 2
6UI updates12UI shows count=1, doubled=2
7Call increment()12UI shows count=1, doubled=2
8count += 122count updated, doubled stale
9Reactive statement runs24doubled updated to 4
10UI updates24UI shows count=2, doubled=4
💡 Execution stops after UI updates reflect latest reactive values.
Variable Tracker
VariableStartAfter Step 4After Step 8Final
count0122
doubledundefined024
Key Moments - 3 Insights
Why does the reactive statement run after count changes?
Because Svelte tracks dependencies, when count changes (see step 4 and 8), it reruns the reactive statement (steps 5 and 9) to update doubled.
What happens if you change count without a reactive statement?
Without $:, dependent values like doubled won't update automatically, so UI would show stale values (see step 4 before reactive runs).
Does the reactive statement run on initialization?
Yes, it runs once after initial variable setup (step 2) to set doubled based on count.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of doubled at step 5?
Aundefined
B0
C2
D4
💡 Hint
Check the 'doubled' column at step 5 in the execution_table.
At which step does the UI first show count=1 and doubled=2?
AStep 6
BStep 4
CStep 5
DStep 3
💡 Hint
Look for the 'UI Update' column describing count=1, doubled=2.
If the reactive statement was removed, what would doubled be after incrementing count to 2?
A4
BStale value (not updated)
C2
Dundefined
💡 Hint
Refer to key_moments about reactive statements updating dependent values.
Concept Snapshot
Reactive statements in Svelte use $: prefix.
They run automatically when dependencies change.
Use them to update variables or run code reactively.
UI updates after reactive statements run.
They run once on initialization too.
Full Transcript
In Svelte, reactive statements start with $:. When a variable used inside such a statement changes, Svelte reruns that statement automatically. For example, if you have let count = 0 and a reactive statement $: doubled = count * 2, then whenever count changes, doubled updates too. This happens without extra code. The UI then updates to show the new values. The reactive statement also runs once after initialization to set initial values. This makes it easy to keep variables and UI in sync without manual updates.

Practice

(1/5)
1. What does the $: symbol do in a Svelte component?
easy
A. It imports a module asynchronously.
B. It marks a statement as reactive, so it runs when its dependencies change.
C. It declares a variable as a prop to the component.
D. It defines a CSS style block scoped to the component.

Solution

  1. Step 1: Understand the role of $: in Svelte

    The $: prefix is used to mark statements as reactive, meaning they automatically re-run when any variable they use changes.
  2. Step 2: Compare with other options

    Options A, B, and D describe unrelated Svelte features: async imports, props, and scoped styles, which do not use $:.
  3. Final Answer:

    It marks a statement as reactive, so it runs when its dependencies change. -> Option B
  4. Quick Check:

    Reactive statement = runs on data change [OK]
Hint: Remember $: means 'run this when data changes' [OK]
Common Mistakes:
  • Confusing $: with props declaration
  • Thinking $: imports modules
  • Assuming $: styles CSS
2. Which of the following is the correct syntax to create a reactive statement in Svelte?
easy
A. let $: total = a + b;
B. const $total = a + b;
C. reactive total = a + b;
D. $: total = a + b;

Solution

  1. Step 1: Identify correct reactive statement syntax

    In Svelte, reactive statements start with $: followed by an assignment or expression, e.g. $: total = a + b;.
  2. Step 2: Eliminate incorrect options

    let $: total = a + b; incorrectly places $: after let. reactive total = a + b; uses a non-existent keyword reactive. const $total = a + b; uses $ in variable name incorrectly.
  3. Final Answer:

    $: total = a + b; -> Option D
  4. Quick Check:

    Reactive statement syntax = $: expression [OK]
Hint: Start reactive lines with $: and no let/const [OK]
Common Mistakes:
  • Using let or const with $: reactive statements
  • Writing $: inside variable names
  • Using non-existent keywords like reactive
3. Consider this Svelte code:
let a = 2;
let b = 3;
$: sum = a + b;

// Later in code
b = 5;

What is the value of sum after b changes?
medium
A. 7
B. 5
C. 8
D. 3

Solution

  1. Step 1: Understand reactive statement behavior

    The reactive statement $: sum = a + b; runs whenever a or b changes. Initially, a=2 and b=3, so sum=5.
  2. Step 2: Update after changing b

    When b changes to 5, the reactive statement re-runs, updating sum = 2 + 5 = 7. But note the options carefully: 8 is 8, which is 2 + 6, not correct. 7 is 7, which matches calculation.
  3. Final Answer:

    7 -> Option A
  4. Quick Check:

    sum updates automatically = 7 [OK]
Hint: Reactive sums update immediately when inputs change [OK]
Common Mistakes:
  • Not updating sum after b changes
  • Adding wrong numbers
  • Confusing initial and updated values
4. Identify the error in this Svelte reactive statement:
let count = 0;
$: count = count + 1;
medium
A. Reactive statements cannot use let variables.
B. Syntax error: missing semicolon after count declaration.
C. This causes an infinite loop because count updates itself reactively.
D. No error; this code increments count once.

Solution

  1. Step 1: Analyze reactive statement effect

    The statement $: count = count + 1; runs whenever count changes. But it changes count itself, causing it to run again immediately, creating an infinite loop.
  2. Step 2: Check other options

    Syntax error: missing semicolon after count declaration. is incorrect because semicolons are optional in JS. Reactive statements cannot use let variables. is false; reactive statements can use let variables. No error; this code increments count once. is wrong because the increment repeats endlessly.
  3. Final Answer:

    This causes an infinite loop because count updates itself reactively. -> Option C
  4. Quick Check:

    Reactive self-update causes infinite loop [OK]
Hint: Avoid reactive statements that update their own dependencies [OK]
Common Mistakes:
  • Ignoring infinite loops from self-updating reactive statements
  • Thinking semicolons cause errors
  • Believing reactive statements can't use let variables
5. You want to create a reactive statement that updates discountedPrice only when price or discount change, but discount can sometimes be zero or null. Which reactive statement correctly handles this so discountedPrice is price when discount is falsy?
hard
A. $: discountedPrice = discount ? price - (price * discount) : price;
B. $: discountedPrice = price - (price * discount);
C. $: discountedPrice = price - (price * (discount || 1));
D. $: discountedPrice = price * discount || price;

Solution

  1. Step 1: Understand the problem with falsy discount

    If discount is zero or null, we want discountedPrice to equal price (no discount). A simple calculation without check will give wrong results.
  2. Step 2: Evaluate each option

    $: discountedPrice = price - (price * discount); always subtracts price * discount, so zero discount works but null may cause NaN. $: discountedPrice = discount ? price - (price * discount) : price; uses a conditional to check if discount is truthy, else returns price, correctly handling zero and null. $: discountedPrice = price - (price * (discount || 1)); uses discount || 1, which makes discount 1 if falsy, causing full price discount (wrong). $: discountedPrice = price * discount || price; multiplies price by discount or price, which gives wrong results when discount is zero.
  3. Final Answer:

    $: discountedPrice = discount ? price - (price * discount) : price; -> Option A
  4. Quick Check:

    Use conditional to handle falsy discount [OK]
Hint: Use conditional ?: to handle zero or null discount safely [OK]
Common Mistakes:
  • Ignoring falsy discount causing wrong calculations
  • Using || 1 which changes discount incorrectly
  • Assuming zero discount subtracts correctly without check
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard