Discover how to stop chasing props and start sharing data effortlessly in Svelte!
Context API vs stores in Svelte - When to Use Which
Imagine you have a Svelte app where many components need to share the same data, like user info or theme settings. You try passing props down through many layers manually.
Passing props through many components is tiring and error-prone. If you want to update shared data, you must change every component that receives it. This leads to messy code and bugs.
The Context API and stores let you share data easily across components without passing props everywhere. They keep your code clean and updates simple.
Parent.svelte: <Child user={user} />
Child.svelte: <Grandchild user={user} />
Grandchild.svelte: use {user}Create store: import { writable } from 'svelte/store'; export const user = writable(null); Use store: import { user } from './store'; $user Or use Context API to provide and consume data
You can share and update data globally in your app smoothly, making your components simpler and your app easier to maintain.
Think of a shopping cart in an online store. Many parts of the app need to know what's in the cart. Using stores or Context API, all components see the same cart data instantly.
Passing props manually is slow and messy for shared data.
Context API and stores provide clean ways to share data globally.
They make your app easier to build, update, and maintain.
Practice
Solution
Step 1: Understand Context API scope
Context API shares data only between parent and its children components, not globally.Step 2: Understand stores scope
Stores provide reactive global state accessible from any component in the app.Final Answer:
Context API shares data only between parent and child components, while stores provide global reactive state accessible anywhere. -> Option CQuick Check:
Context API = parent-child, stores = global state [OK]
- Thinking stores only pass data down like props
- Confusing Context API with global state management
- Assuming stores are for styling or lifecycle
Solution
Step 1: Recall writable store methods
Svelte writable stores have a set() method to assign a new value.Step 2: Check other options
store.value is not valid, update() takes a function, change() does not exist.Final Answer:
store.set(newValue); -> Option AQuick Check:
Use set() to assign store value [OK]
- Trying to assign store.value directly
- Using update() with a value instead of a function
- Using non-existent methods like change()
import { setContext, getContext } from 'svelte';
// Parent.svelte
setContext('color', 'blue');
// Child.svelte
const color = getContext('color');
What will
color be inside Child.svelte?Solution
Step 1: Understand setContext and getContext
setContext('color', 'blue') sets a value accessible to child components via getContext('color').Step 2: Check child access
Child.svelte calls getContext('color') and receives 'blue' because it is a child of the parent setting the context.Final Answer:
'blue' -> Option DQuick Check:
Context API passes 'blue' from parent to child [OK]
- Expecting undefined if not wrapped properly
- Confusing context keys or forgetting to setContext
- Assuming context works globally like stores
import { writable } from 'svelte/store';
const count = writable(0);
function increment() {
count = count + 1;
}Solution
Step 1: Identify store usage error
The code tries to do count = count + 1, which reassigns the store variable instead of updating its value.Step 2: Correct way to update store
Use count.update(n => n + 1) or count.set(newValue) to change the store's value reactively.Final Answer:
You cannot reassign the store variable; must use count.update() or count.set(). -> Option BQuick Check:
Update store with update() or set(), not reassignment [OK]
- Trying to assign store variable directly
- Ignoring reactive update methods
- Thinking writable stores can't hold numbers
Solution
Step 1: Identify requirement for global reactive state
The theme color must be shared app-wide and update reactively from any component.Step 2: Compare Context API and stores
Context API only shares data between parent and children, not globally. Stores provide reactive global state accessible anywhere.Final Answer:
Use a writable store for the theme color because stores provide reactive global state accessible anywhere. -> Option AQuick Check:
Global reactive state needs stores, not Context API [OK]
- Choosing Context API for global state
- Passing props everywhere manually
- Using local variables that don't sync
Ready to prove it?
Pass the test and this pattern moves unknown
