Bird
Raised Fist0
Svelteframework~10 mins

Why stores manage shared state in Svelte - Visual Breakdown

Choose your learning style10 modes available
Concept Flow - Why stores manage shared state
Component A reads state
↓
Component B reads state
↓
Store holds shared state
↓
Component A updates state
↓
Store updates value
↓
Component B reacts to update
↓
UI stays in sync
Components read and update a shared store, which keeps the state consistent and syncs all components automatically.
Execution Sample
Svelte
import { writable } from 'svelte/store';

const count = writable(0);

// Component B
count.subscribe(value => console.log(value));

// Component A
count.set(1);
Two components share a count store; one sets it, the other logs updates automatically.
Execution Table
StepActionStore Value BeforeStore Value AfterComponent Reaction
1Create store with initial valueN/A0No reaction yet
2Component B subscribes to store00Logs 0 immediately
3Component A sets store to 101Component B logs 1
4Component A sets store to 515Component B logs 5
5Component B unsubscribes55No further logs
6Component A sets store to 10510No reaction, B unsubscribed
💡 Component B unsubscribed, so no reaction to further store changes.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6
count0015510
Key Moments - 3 Insights
Why does Component B log the initial value immediately after subscribing?
Because Svelte stores call subscribers immediately with the current value, as shown in step 2 of the execution_table.
What happens if a component unsubscribes from the store?
It stops receiving updates, so no reaction occurs after unsubscription, as seen in steps 5 and 6.
Why do both components share the same state?
Because they use the same store instance, which holds the single source of truth for the shared state.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what value does Component B log at step 3?
A1
B0
C5
D10
💡 Hint
Check the 'Component Reaction' column at step 3 in the execution_table.
At which step does Component B stop reacting to store changes?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Look for when the 'Component Reaction' says no further logs in the execution_table.
If Component A never called set(), what would Component B log after subscribing?
ANothing
B0
Cundefined
DError
💡 Hint
Refer to step 2 where subscription logs the current store value immediately.
Concept Snapshot
Svelte stores hold shared state.
Components subscribe to stores to get updates.
Updating the store notifies all subscribers.
Unsubscribing stops updates.
Stores keep UI in sync automatically.
Full Transcript
In Svelte, stores manage shared state by holding a single value that multiple components can read and update. When a component subscribes to a store, it immediately receives the current value. If any component updates the store, all subscribed components react to the change, keeping the UI consistent. If a component unsubscribes, it stops receiving updates. This shared store approach avoids state conflicts and keeps components synchronized.

Practice

(1/5)
1. Why do Svelte stores help manage shared state in an app?
easy
A. They store data only for one component at a time.
B. They make the app run faster by skipping updates.
C. They keep data in one place and update all parts automatically.
D. They prevent any data changes after initialization.

Solution

  1. Step 1: Understand the role of stores

    Svelte stores hold shared data centrally so multiple components can access it easily.
  2. Step 2: Recognize automatic updates

    When the store data changes, all components using it update automatically, keeping UI in sync.
  3. Final Answer:

    They keep data in one place and update all parts automatically. -> Option C
  4. Quick Check:

    Shared data + auto update = A [OK]
Hint: Stores centralize data and auto-update components [OK]
Common Mistakes:
  • Thinking stores only speed up the app
  • Believing stores hold data per component only
  • Assuming stores freeze data after setup
2. Which of the following is the correct way to import and create a writable store in Svelte?
easy
A. import writable from 'svelte'; const count = writable(0);
B. import { writable } from 'svelte/store'; const count = store(0);
C. import { store } from 'svelte/store'; const count = store(0);
D. import { writable } from 'svelte/store'; const count = writable(0);

Solution

  1. Step 1: Check import syntax

    The writable store is imported from 'svelte/store' using curly braces around writable.
  2. Step 2: Verify store creation

    Creating a writable store uses writable(initialValue), so writable(0) is correct.
  3. Final Answer:

    import { writable } from 'svelte/store'; const count = writable(0); -> Option D
  4. Quick Check:

    Correct import + writable() = B [OK]
Hint: Use curly braces to import writable from 'svelte/store' [OK]
Common Mistakes:
  • Importing writable without braces
  • Using 'store' instead of 'writable'
  • Calling store() instead of writable()
3. Given this Svelte store code, what will be logged to the console?
import { writable } from 'svelte/store';
const count = writable(0);
count.subscribe(value => console.log(value));
count.set(5);
count.update(n => n + 1);
medium
A. 0, 5, 6
B. 5, 6
C. 0, 1, 6
D. 0, 5, 5

Solution

  1. Step 1: Understand subscription initial call

    Subscribing to a writable store immediately calls the callback with the current value, so 0 is logged first.
  2. Step 2: Follow set and update calls

    count.set(5) changes value to 5, logging 5. Then count.update(n => n + 1) adds 1, logging 6.
  3. Final Answer:

    0, 5, 6 -> Option A
  4. Quick Check:

    Subscribe logs initial + set + update values = A [OK]
Hint: Subscribe logs current value immediately, then on changes [OK]
Common Mistakes:
  • Ignoring initial subscription call
  • Thinking update replaces value instead of adding
  • Missing the last logged value
4. What is wrong with this Svelte store usage?
import { writable } from 'svelte/store';
const user = writable({ name: 'Alice' });

// In component
user.name = 'Bob';
medium
A. The store must be declared with let, not const.
B. Directly changing user.name does not update the store value.
C. Writable stores cannot hold objects as values.
D. The store should be imported from 'svelte' not 'svelte/store'.

Solution

  1. Step 1: Identify how to update store values

    Writable stores require using set() or update() to change their value, not direct property assignment.
  2. Step 2: Explain why direct property change fails

    Changing user.name directly modifies the object but does not notify the store, so subscribers won't update.
  3. Final Answer:

    Directly changing user.name does not update the store value. -> Option B
  4. Quick Check:

    Use set() or update() to change store values [OK]
Hint: Always use set() or update() to change store data [OK]
Common Mistakes:
  • Trying to mutate store value properties directly
  • Importing writable incorrectly
  • Thinking const prevents store updates
5. You want to share a counter value across multiple components and update it from any of them. Which approach best uses Svelte stores to achieve this?
hard
A. Create a writable store in a separate file and import it in all components.
B. Pass the counter value as a prop from parent to child components only.
C. Use local variables in each component and sync them manually.
D. Create a store inside each component separately.

Solution

  1. Step 1: Understand shared state needs

    To share and update data across components, a single source of truth is needed.
  2. Step 2: Evaluate store usage

    Creating a writable store in one file and importing it everywhere ensures all components share and react to the same data.
  3. Step 3: Compare other options

    Passing props only works top-down and is cumbersome for many components; local variables are isolated; separate stores cause desync.
  4. Final Answer:

    Create a writable store in a separate file and import it in all components. -> Option A
  5. Quick Check:

    Single shared store file = C [OK]
Hint: Use one store file imported by all components [OK]
Common Mistakes:
  • Trying to sync local variables manually
  • Passing props for deeply nested sharing
  • Creating multiple stores causing inconsistent state
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