Bird
Raised Fist0
Vueframework~5 mins

Creating a Pinia store in Vue - Quick Revision & Summary

Choose your learning style10 modes available
Recall & Review
beginner
What is Pinia in Vue.js?
Pinia is a state management library for Vue.js that helps you store and manage shared data across components in a simple and organized way.
Click to reveal answer
beginner
How do you create a basic Pinia store?
You create a Pinia store by defining a function with <code>defineStore</code> that returns state, getters, and actions. For example:<br><pre>import { defineStore } from 'pinia';
export const useMainStore = defineStore('main', {
  state: () => ({ count: 0 }),
  actions: { increment() { this.count++ } }
});</pre>
Click to reveal answer
beginner
What is the purpose of the state property in a Pinia store?
The state property holds the reactive data that the store manages. It is a function returning an object with all the data properties you want to share.
Click to reveal answer
beginner
How do you use a Pinia store inside a Vue component?
Inside a Vue component, you import the store and call it as a function to get access to its state and actions. For example:<br><pre>import { useMainStore } from '@/stores/main';
const mainStore = useMainStore();
mainStore.increment();</pre>
Click to reveal answer
beginner
Why should you use Pinia instead of local component state for shared data?
Pinia centralizes shared data so multiple components can access and update it easily. This avoids passing props deeply and keeps your app organized and easier to maintain.
Click to reveal answer
Which function is used to create a Pinia store?
AuseStore
BcreateStore
CdefineStore
DmakeStore
What does the state property in a Pinia store return?
AA plain object with methods
BA function returning an object with reactive data
CA string representing the store name
DAn array of actions
How do you access a Pinia store inside a Vue component?
ACall the store function imported from the store file
BUse <code>this.$store</code> like Vuex
CUse <code>new Store()</code>
DImport and use <code>createStore()</code>
Which of these is NOT a part of a Pinia store?
Astate
Bactions
Cgetters
Dcomponents
Why is Pinia preferred over local component state for shared data?
AIt centralizes data for easy sharing across components
BIt makes components heavier
CIt requires more code
DIt disables reactivity
Explain how to create and use a Pinia store in a Vue 3 application.
Think about the steps from defining the store to using it inside a component.
You got /4 concepts.
    Describe the benefits of using Pinia for state management compared to local component state.
    Consider why managing shared data in one place helps your app.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of creating a Pinia store in a Vue application?
      easy
      A. To handle routing between pages
      B. To style components with CSS
      C. To hold and manage shared state across components
      D. To write HTML templates

      Solution

      1. Step 1: Understand what Pinia stores do

        Pinia stores are designed to hold shared data (state) that multiple components can access and update.
      2. Step 2: Identify the correct purpose

        Styling, routing, and HTML templates are handled by other parts of Vue or related libraries, not Pinia stores.
      3. Final Answer:

        To hold and manage shared state across components -> Option C
      4. Quick Check:

        Pinia stores = shared state management [OK]
      Hint: Pinia stores manage shared data, not styles or routes [OK]
      Common Mistakes:
      • Confusing Pinia with CSS or routing libraries
      • Thinking Pinia handles templates
      • Assuming Pinia is for styling
      2. Which of the following is the correct way to define a Pinia store named 'user' using defineStore?
      easy
      A. const userStore = createStore('user', { state: () => ({ name: '' }) })
      B. const userStore = defineStore('user', { data: () => ({ name: '' }) })
      C. const useUserStore = defineStore({ name: 'user', state: () => ({ name: '' }) })
      D. const useUserStore = defineStore('user', { state: () => ({ name: '' }) })

      Solution

      1. Step 1: Recall the correct syntax for defineStore

        The correct syntax is defineStore('storeId', { state: () => ({ ... }) }) and assign it to a function named useStoreId.
      2. Step 2: Check each option

        const useUserStore = defineStore('user', { state: () => ({ name: '' }) }) uses defineStore with correct parameters and naming. const userStore = createStore('user', { state: () => ({ name: '' }) }) uses createStore which is incorrect. const useUserStore = defineStore({ name: 'user', state: () => ({ name: '' }) }) passes an object without storeId string first. const userStore = defineStore('user', { data: () => ({ name: '' }) }) uses 'data' instead of 'state'.
      3. Final Answer:

        const useUserStore = defineStore('user', { state: () => ({ name: '' }) }) -> Option D
      4. Quick Check:

        defineStore('id', { state }) syntax = const useUserStore = defineStore('user', { state: () => ({ name: '' }) }) [OK]
      Hint: Use defineStore('id', { state: () => ({}) }) with useId naming [OK]
      Common Mistakes:
      • Using createStore instead of defineStore
      • Passing object without store id string
      • Using 'data' instead of 'state' key
      3. Given this Pinia store definition:
      const useCounterStore = defineStore('counter', {
        state: () => ({ count: 0 }),
        actions: {
          increment() { this.count++ }
        }
      })

      What will be the value of count after calling increment() twice?
      medium
      A. 0
      B. 2
      C. undefined
      D. 1

      Solution

      1. Step 1: Understand initial state and action

        The initial count is 0. The increment action increases count by 1 each time it is called.
      2. Step 2: Calculate count after two increments

        Calling increment() twice adds 1 + 1 to count, so count becomes 2.
      3. Final Answer:

        2 -> Option B
      4. Quick Check:

        0 + 1 + 1 = 2 [OK]
      Hint: Each increment adds 1; two calls add 2 total [OK]
      Common Mistakes:
      • Forgetting to call increment twice
      • Assuming count resets each call
      • Confusing initial value with updated value
      4. Identify the error in this Pinia store code:
      const useTodoStore = defineStore('todo', {
        state: () => ({ todos: [] }),
        actions: {
          addTodo(todo) {
            this.todos.push(todo)
          }
        }
      })
      
      // Usage
      const todoStore = useTodoStore()
      todoStore.addTodo('Learn Pinia')
      medium
      A. Missing import of defineStore from 'pinia'
      B. State should be an object, not a function
      C. Actions cannot modify state directly
      D. Store id must be an object, not a string

      Solution

      1. Step 1: Check the store definition syntax

        The store is correctly defined with state as a function returning an object, and actions modifying state properly.
      2. Step 2: Identify missing parts

        The code snippet does not show importing defineStore from 'pinia', which is required to use defineStore.
      3. Final Answer:

        Missing import of defineStore from 'pinia' -> Option A
      4. Quick Check:

        Always import defineStore before use [OK]
      Hint: Always import defineStore from 'pinia' before defining stores [OK]
      Common Mistakes:
      • Forgetting to import defineStore
      • Thinking state must be an object, not a function
      • Believing actions cannot modify state
      5. You want to create a Pinia store that keeps track of a user's profile with a name and age, and includes a getter to check if the user is an adult (age >= 18). Which of the following is the correct way to define this store?
      hard
      A. const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), getters: { isAdult() { return this.age >= 18 } } })
      B. const useUserStore = defineStore('user', { state: { name: '', age: 0 }, getters: { isAdult() { return this.age >= 18 } } })
      C. const useUserStore = defineStore('user', { state: { name: '', age: 0 }, getters: { isAdult: (state) => state.age >= 18 } })
      D. const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), actions: { isAdult() { return this.age >= 18 } } })

      Solution

      1. Step 1: Check state definition

        State must be a function returning an object. Options C and D do this correctly; A and B do not.
      2. Step 2: Check getter syntax

        Getters can be defined as functions using 'this' to access state. const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), getters: { isAdult() { return this.age >= 18 } } }) uses this correctly. const useUserStore = defineStore('user', { state: { name: '', age: 0 }, getters: { isAdult: (state) => state.age >= 18 } }) has incorrect state. const useUserStore = defineStore('user', { state: { name: '', age: 0 }, getters: { isAdult() { return this.age >= 18 } } }) has incorrect state. const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), actions: { isAdult() { return this.age >= 18 } } }) puts isAdult in actions, which is wrong because isAdult is a computed property, not an action.
      3. Final Answer:

        const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), getters: { isAdult() { return this.age >= 18 } } }) -> Option A
      4. Quick Check:

        State as function + getter with this = const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), getters: { isAdult() { return this.age >= 18 } } }) [OK]
      Hint: State is function; getters use this for reactive access [OK]
      Common Mistakes:
      • Defining state as object instead of function
      • Putting computed logic inside actions
      • Using arrow function getters with state parameter incorrectly
      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