Bird
Raised Fist0
Svelteframework~5 mins

Derived values with $: in Svelte

Choose your learning style10 modes available
Introduction

Derived values with $: let you automatically update one value when others change. It keeps your code simple and reactive without extra work.

You want to show a total price that updates when quantity or price changes.
You need to format a date string whenever the date value changes.
You want to calculate a user's full name from first and last names.
You want to update a message based on user input instantly.
Syntax
Svelte
$: derivedValue = expression;

The $: label tells Svelte to recalculate derivedValue whenever any variable in expression changes.

You can use multiple $: statements in one component.

Examples
Calculate total whenever price or quantity changes.
Svelte
$: total = price * quantity;
Combine first and last names into fullName automatically.
Svelte
$: fullName = firstName + ' ' + lastName;
Create a greeting message that updates when name changes.
Svelte
$: greeting = `Hello, ${name}!`;
Sample Program

This Svelte component shows price and quantity. The total updates automatically when quantity changes. Clicking the button increases quantity and updates total instantly.

Svelte
<script>
  let price = 10;
  let quantity = 2;

  $: total = price * quantity;

  function increaseQuantity() {
    quantity += 1;
  }
</script>

<main>
  <p>Price: {price} USD</p>
  <p>Quantity: {quantity}</p>
  <p><strong>Total: {total} USD</strong></p>
  <button on:click={increaseQuantity} aria-label="Increase quantity">Add one more</button>
</main>
OutputSuccess
Important Notes

Derived values run automatically and efficiently only when needed.

Don't assign to a derived value inside the $: block; it should be computed from other variables.

Summary

$: creates reactive derived values that update automatically.

Use it to keep related data in sync without manual updates.

It makes your Svelte code cleaner and easier to read.

Practice

(1/5)
1. What does the $: label do in Svelte?
easy
A. It defines a function that runs only once when the component loads.
B. It declares a variable that cannot be changed.
C. It imports external libraries into the component.
D. It creates a reactive statement that updates automatically when dependencies change.

Solution

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

    The $: label marks a reactive statement that runs whenever its dependencies change.
  2. Step 2: Compare with other options

    Options B, C, and D describe unrelated features: constants, imports, and lifecycle functions, not reactive statements.
  3. Final Answer:

    It creates a reactive statement that updates automatically when dependencies change. -> Option D
  4. Quick Check:

    Reactive statements = It creates a reactive statement that updates automatically when dependencies change. [OK]
Hint: Remember: $: means auto-update when data changes [OK]
Common Mistakes:
  • Thinking $: declares constants
  • Confusing $: with imports or functions
  • Believing it runs only once
2. Which of the following is the correct syntax to create a reactive derived value double from count in Svelte?
easy
A. let $double = count * 2;
B. $: double = count * 2;
C. const double = $: count * 2;
D. double = $count * 2;

Solution

  1. Step 1: Identify correct reactive syntax

    In Svelte, reactive statements start with $: followed by an assignment. So $: double = count * 2; is correct.
  2. Step 2: Check other options for syntax errors

    let $double = count * 2; wrongly uses let $double, which is invalid. const double = $: count * 2; misplaces $:. double = $count * 2; uses $count which is incorrect syntax.
  3. Final Answer:

    $: double = count * 2; -> Option B
  4. Quick Check:

    Reactive assignment = $: double = count * 2; [OK]
Hint: Reactive statements start with $: followed by assignment [OK]
Common Mistakes:
  • Using $ inside variable names
  • Placing $: after the variable
  • Confusing reactive syntax with normal variable declarations
3. Given the code:
let count = 3;
$: double = count * 2;
count = 5;

What is the value of double after count changes?
medium
A. 10
B. 3
C. 6
D. Undefined

Solution

  1. Step 1: Understand reactive update

    Initially, count is 3, so double is 6. When count changes to 5, the reactive statement recalculates double as 5 * 2 = 10.
  2. Step 2: Confirm final value of double

    After the update, double is 10, reflecting the latest count.
  3. Final Answer:

    10 -> Option A
  4. Quick Check:

    double = count * 2 = 10 [OK]
Hint: Reactive values update immediately when dependencies change [OK]
Common Mistakes:
  • Assuming double stays at initial value
  • Thinking reactive statements run only once
  • Confusing variable assignment timing
4. Identify the error in this Svelte code snippet:
let a = 2;
$: b = a + 3
$: c = b * 2;
medium
A. Missing semicolon after b = a + 3 causes syntax error.
B. Reactive statements cannot depend on other reactive variables.
C. No error; code works correctly.
D. Variables a, b, and c must be declared with const.

Solution

  1. Step 1: Check syntax and reactive dependencies

    In Svelte, semicolons are optional. Reactive statements can depend on other reactive variables like b.
  2. Step 2: Verify variable declarations

    Variables can be declared with let and updated reactively. No need for const here.
  3. Final Answer:

    No error; code works correctly. -> Option C
  4. Quick Check:

    Reactive chaining allowed = No error; code works correctly. [OK]
Hint: Svelte allows reactive statements to depend on other reactive values [OK]
Common Mistakes:
  • Expecting mandatory semicolons
  • Believing reactive variables can't chain
  • Forcing const declarations unnecessarily
5. You want to create a reactive derived value status that shows "High" if score is above 80, "Medium" if between 50 and 80, and "Low" otherwise. Which Svelte code correctly implements this?
hard
A. $: status = score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low';
B. if (score > 80) { status = 'High'; } else if (score >= 50) { status = 'Medium'; } else { status = 'Low'; }
C. let status = $: score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low';
D. $: status = (score > 80 && 'High') || (score > 80 && 'Medium') || 'Low';

Solution

  1. Step 1: Check reactive statement syntax

    $: status = score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low'; uses a single reactive assignment with nested ternary operators, which is valid and concise.
  2. Step 2: Evaluate other options

    let status = $: score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low'; incorrectly combines let and $:. if (score > 80) { status = 'High'; } else if (score >= 50) { status = 'Medium'; } else { status = 'Low'; } uses an if-else block but lacks $: label for reactivity. $: status = (score > 80 && 'High') || (score > 80 && 'Medium') || 'Low'; uses logical operators with duplicate conditions that never produce 'Medium'.
  3. Final Answer:

    $: status = score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low'; -> Option A
  4. Quick Check:

    Correct reactive ternary = $: status = score > 80 ? 'High' : score >= 50 ? 'Medium' : 'Low'; [OK]
Hint: Use nested ternary inside $: for concise reactive logic [OK]
Common Mistakes:
  • Omitting $: for reactive statements
  • Mixing let with $: incorrectly
  • Using if-else without reactive label
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