📖 Scenario: You are creating a simple counter app in Svelte. The counter value will be stored in a writable store so that multiple components can share and update the count easily.
🎯 Goal: Build a Svelte app that uses a writable store to hold a counter value. The app will have buttons to increase and decrease the counter, and the displayed number updates automatically.
📋 What You'll Learn
Create a writable store called count with initial value 0
Create a variable called step set to 1 to control increment/decrement
Use the update method of the count store to increase or decrease the count by step
Bind the store value to the component and add buttons to change the count
💡 Why This Matters
🌍 Real World
Writable stores let you share and update data easily across multiple parts of a Svelte app, like counters, user settings, or live data.
💼 Career
Understanding writable stores is key for building interactive, stateful Svelte applications used in real-world web projects.
Progress0 / 4 steps
1
Create the writable store
Import writable from 'svelte/store' and create a writable store called count with initial value 0.
Svelte
Hint
Use import { writable } from 'svelte/store' and then const count = writable(0).
2
Add a step variable for increment
In the Svelte component script, create a variable called step and set it to 1.
Svelte
Hint
Just write let step = 1 inside the script.
3
Update the count store with buttons
Add two functions called increment and decrement that use count.update to add or subtract step from the current count.
Svelte
Hint
Use count.update(n => n + step) inside increment and similarly for decrement.
4
Bind the store and add buttons in markup
In the Svelte component markup, use {$count} to show the current count. Add two buttons with on:click handlers calling increment and decrement.
Svelte
Hint
Use {$count} to show the store value and add buttons with on:click handlers.
Practice
(1/5)
1. What is the main purpose of a writable store in Svelte?
easy
A. To style components dynamically
B. To hold data that can be changed and shared across components
C. To create static, unchangeable data
D. To handle routing between pages
Solution
Step 1: Understand writable store role
Writable stores in Svelte are designed to hold data that can be changed and shared reactively.
Step 2: Compare options
Only To hold data that can be changed and shared across components correctly describes writable stores as changeable and shareable data holders.
Final Answer:
To hold data that can be changed and shared across components -> Option B
Quick Check:
Writable store = changeable shared data [OK]
Hint: Writable stores hold changeable shared data [OK]
Common Mistakes:
Confusing writable stores with static data
Thinking writable stores handle styling or routing
Assuming writable stores cannot be updated
2. Which of the following is the correct way to create a writable store in Svelte?
easy
A. import { writable } from 'svelte/store'; const count = writable(0);
B. import { readable } from 'svelte/store'; const count = readable(0);
C. const count = writable(0); without import
D. import { store } from 'svelte'; const count = store(0);
Solution
Step 1: Check import statement
The writable store must be imported from 'svelte/store' using { writable }.
Step 2: Verify store creation syntax
Creating a writable store uses writable(initialValue), so import { writable } from 'svelte/store'; const count = writable(0); is correct.
Final Answer:
import { writable } from 'svelte/store'; const count = writable(0); -> Option A
Quick Check:
Writable store import and creation = import { writable } from 'svelte/store'; const count = writable(0); [OK]
Hint: Writable stores need import { writable } from 'svelte/store' [OK]
Common Mistakes:
Using readable instead of writable
Forgetting to import writable
Wrong import path or syntax
3. Given this code:
import { writable } from 'svelte/store';
const count = writable(5);
count.update(n => n + 3);
console.log($count);
What will be logged to the console?
medium
A. Error: $count is undefined
B. 8
C. 3
D. 5
Solution
Step 1: Understand store update
The update method changes the store value from 5 to 8 by adding 3.
Step 2: Check usage of $count outside component
The $ prefix to access store value works only inside Svelte components, not in plain JS code like console.log.
Final Answer:
Error: $count is undefined -> Option A
Quick Check:
$ prefix only works inside components [OK]
Hint: Use $ only inside components, not in plain JS [OK]
Common Mistakes:
Assuming $count works outside components
Ignoring that update changes value
Expecting console.log to show store value directly
D. count + 1 is invalid because count is a store, not a number
Solution
Step 1: Identify what count represents
count is a writable store object, not a number, so count + 1 is invalid.
Step 2: Correct way to update store
You must use count.update(n => n + 1) or count.set(value) with a number, not count + 1.
Final Answer:
count + 1 is invalid because count is a store, not a number -> Option D
Quick Check:
Store object + number is invalid [OK]
Hint: Use update or get value before set, not store + number [OK]
Common Mistakes:
Trying to add number directly to store object
Forgetting to use update for changes
Assuming set needs import separately
5. You want to create a writable store that holds a number starting at 10. Then you want to double its value only if it is less than 50. Which code correctly does this?
hard
A. const num = writable(10);
num.set(20);
B. const num = writable(10);
num.set(n => n < 50 ? n * 2 : n);
C. const num = writable(10);
num.update(n => n < 50 ? n * 2 : n);
D. const num = writable(10);
num.update(n => n * 2);
Solution
Step 1: Create writable store with initial value 10
Using writable(10) correctly sets the initial number.
Step 2: Use update with condition to double if less than 50
update receives current value n and returns n*2 if n < 50, else n unchanged, matching requirement.
Step 3: Check other options
const num = writable(10);
num.set(n => n < 50 ? n * 2 : n); wrongly uses set with a function, which is invalid. const num = writable(10);
num.update(n => n * 2); doubles unconditionally. const num = writable(10);
num.set(20); sets fixed 20 ignoring condition.
Final Answer:
const num = writable(10);
num.update(n => n < 50 ? n * 2 : n); -> Option C
Quick Check:
Use update with condition to change value [OK]
Hint: Use update(fn) with condition to change store value [OK]
Common Mistakes:
Using set with a function instead of a value
Not applying condition inside update
Setting fixed value ignoring condition
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.