Bird
Raised Fist0
Svelteframework~5 mins

Custom store logic in Svelte - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a custom store in Svelte?
A custom store in Svelte is a way to create your own reactive data source with custom logic for updating and subscribing, beyond the built-in writable or readable stores.
Click to reveal answer
beginner
Which function do you use to create a custom store in Svelte?
You create a custom store by writing a function that returns an object with a subscribe method, and optionally set and update methods for writable behavior.
Click to reveal answer
intermediate
Why would you use a custom store instead of a writable store in Svelte?
You use a custom store when you want to add extra logic like validation, side effects, or complex state management that writable stores don't support directly.
Click to reveal answer
beginner
What does the subscribe method in a custom store do?
The subscribe method lets components listen to changes in the store's value and reactively update when the value changes.
Click to reveal answer
intermediate
How can you add a cleanup function in a custom store?
Inside the subscribe method, you can return a function that runs when the last subscriber unsubscribes, useful for cleaning up resources like timers or event listeners.
Click to reveal answer
What must a custom store in Svelte always provide?
AAn update method
BA set method
CA subscribe method
DA reset method
Which of these is NOT a reason to create a custom store?
ATo automatically style components
BTo share reactive state
CTo add validation logic
DTo handle side effects on state changes
How do you notify subscribers about a new value in a custom store?
AUse console.log
BCall setTimeout
CReturn a cleanup function
DCall the subscriber functions with the new value
What does the cleanup function returned by subscribe do?
ARuns when the last subscriber unsubscribes
BRuns every time the value changes
CRuns before the first subscriber subscribes
DRuns when the store is created
Which Svelte store type is easiest to customize with extra logic?
ADerived store
BCustom store
CWritable store
DReadable store
Explain how to create a custom store in Svelte and why you might want to use one.
Think about how you share reactive data with extra control.
You got /4 concepts.
    Describe the role of the subscribe method and the cleanup function in a custom Svelte store.
    Focus on how subscriptions start and stop.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of creating a custom store in Svelte?
      easy
      A. To disable reactivity in the app
      B. To add custom methods and control how data updates and shares
      C. To make the store work only on the server side
      D. To replace the built-in writable store completely

      Solution

      1. Step 1: Understand what a custom store does

        A custom store extends the basic writable store by adding your own methods to control data updates and sharing.
      2. Step 2: Compare options with this understanding

        Only "To add custom methods and control how data updates and shares" correctly describes this purpose. The other options misunderstand the role of custom stores: disabling reactivity, replacing the built-in writable store completely, or server-side only.
      3. Final Answer:

        To add custom methods and control how data updates and shares -> Option B
      4. Quick Check:

        Custom store purpose = Add custom methods [OK]
      Hint: Custom stores add your own methods to writable stores [OK]
      Common Mistakes:
      • Thinking custom stores replace writable stores entirely
      • Believing custom stores disable reactivity
      • Assuming custom stores only run on the server
      2. Which of the following is the correct way to create a custom store in Svelte?
      easy
      A. import { writable } from 'svelte/store'; function createStore() { const { subscribe, update } = writable(0); return { subscribe, increment: () => update(n => n + 1) }; }
      B. import { readable } from 'svelte/store'; function createStore() { const { subscribe } = readable(0); return { subscribe, increment: () => {} }; }
      C. import { writable } from 'svelte/store'; function createStore() { const { subscribe, set } = writable(0); return { subscribe, increment: () => set(n => n + 1) }; }
      D. import { store } from 'svelte/store'; function createStore() { return { subscribe: () => {}, increment: () => {} }; }

      Solution

      1. Step 1: Check import and store creation

        import { writable } from 'svelte/store'; function createStore() { const { subscribe, update } = writable(0); return { subscribe, increment: () => update(n => n + 1) }; } correctly imports writable and uses update to change the value.
      2. Step 2: Verify method usage

        import { writable } from 'svelte/store'; function createStore() { const { subscribe, set } = writable(0); return { subscribe, increment: () => set(n => n + 1) }; } incorrectly uses set with a function argument, which is invalid. import { readable } from 'svelte/store'; function createStore() { const { subscribe } = readable(0); return { subscribe, increment: () => {} }; } uses readable which is read-only. import { store } from 'svelte/store'; function createStore() { return { subscribe: () => {}, increment: () => {} }; } imports a non-existent store.
      3. Final Answer:

        import { writable } from 'svelte/store'; function createStore() { const { subscribe, update } = writable(0); return { subscribe, increment: () => update(n => n + 1) }; } -> Option A
      4. Quick Check:

        Correct syntax uses writable and update() [OK]
      Hint: Use writable and update() for custom store methods [OK]
      Common Mistakes:
      • Using set() with a function argument
      • Using readable store when write access is needed
      • Importing non-existent store types
      3. Given this custom store code, what will be logged after calling counter.increment() twice?
      import { writable } from 'svelte/store';
      function createCounter() {
        const { subscribe, update } = writable(0);
        return {
          subscribe,
          increment: () => update(n => n + 1)
        };
      }
      const counter = createCounter();
      counter.subscribe(value => console.log(value));
      counter.increment();
      counter.increment();
      medium
      A. 0, 1, 2
      B. 1, 2
      C. 0, 2
      D. 2

      Solution

      1. Step 1: Understand subscription behavior

        Subscribing logs the current value immediately, so 0 is logged first.
      2. Step 2: Trace increments and logs

        Each increment increases the value by 1 and triggers the subscriber, logging 1 then 2.
      3. Final Answer:

        0, 1, 2 -> Option A
      4. Quick Check:

        Subscription logs initial and updates [OK]
      Hint: Subscription logs initial value immediately [OK]
      Common Mistakes:
      • Ignoring initial subscription log
      • Assuming increments log only final value
      • Confusing update with set behavior
      4. Identify the error in this custom store code:
      import { writable } from 'svelte/store';
      function createTimer() {
        const { subscribe, set } = writable(0);
        let interval = null;
        return {
          subscribe,
          start: () => {
            interval = setInterval(() => set(n + 1), 1000);
          },
          stop: () => clearInterval(interval)
        };
      }
      medium
      A. Not clearing interval on stop
      B. Missing update method for incrementing
      C. Using set(n + 1) without defining n
      D. Incorrect import of writable store

      Solution

      1. Step 1: Check the setInterval callback

        The callback uses set(n + 1) but n is not defined anywhere in scope.
      2. Step 2: Understand correct usage

        To increment the value, update should be used or the current value tracked. Using set with undefined n causes an error.
      3. Final Answer:

        Using set(n + 1) without defining n -> Option C
      4. Quick Check:

        Undefined variable in set() causes error [OK]
      Hint: Use update() or track value before set() [OK]
      Common Mistakes:
      • Using set() with undefined variable
      • Forgetting to clear intervals
      • Confusing set and update methods
      5. You want to create a custom store that holds a list of items and provides a method to add unique items only (no duplicates). Which implementation correctly achieves this?
      hard
      A. import { writable } from 'svelte/store'; function createList() { const { subscribe, update } = writable([]); return { subscribe, add: (item) => update(list => [...list, item]) }; }
      B. import { writable } from 'svelte/store'; function createList() { const { subscribe, set } = writable([]); return { subscribe, add: (item) => set(list => list.includes(item) ? list : [...list, item]) }; }
      C. import { readable } from 'svelte/store'; function createList() { const { subscribe } = readable([]); return { subscribe, add: (item) => {} }; }
      D. import { writable } from 'svelte/store'; function createList() { const { subscribe, update } = writable([]); return { subscribe, add: (item) => update(list => list.includes(item) ? list : [...list, item]) }; }

      Solution

      1. Step 1: Check method to add unique items

        import { writable } from 'svelte/store'; function createList() { const { subscribe, update } = writable([]); return { subscribe, add: (item) => update(list => list.includes(item) ? list : [...list, item]) }; } uses update and checks if the item exists before adding, preventing duplicates.
      2. Step 2: Verify other options

        import { writable } from 'svelte/store'; function createList() { const { subscribe, set } = writable([]); return { subscribe, add: (item) => set(list => list.includes(item) ? list : [...list, item]) }; } incorrectly uses set with a function argument, which is invalid. import { readable } from 'svelte/store'; function createList() { const { subscribe } = readable([]); return { subscribe, add: (item) => {} }; } uses readable which is read-only. import { writable } from 'svelte/store'; function createList() { const { subscribe, update } = writable([]); return { subscribe, add: (item) => update(list => [...list, item]) }; } adds items without checking duplicates.
      3. Final Answer:

        Custom store with update() and duplicate check -> Option D
      4. Quick Check:

        Use update() and check includes() for uniqueness [OK]
      Hint: Use update() with includes() check to avoid duplicates [OK]
      Common Mistakes:
      • Using set() with function argument
      • Using readable store when write access needed
      • Not checking for duplicates before adding
      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