DeployU
Interviews / Frontend Engineering / How do you do state management in Vue?

How do you do state management in Vue?

architecture State Management Interactive Quiz Code Examples

The Scenario

You are a frontend engineer at a social media company. You are building a new single-page application (SPA) that has a complex state that needs to be shared across multiple components.

You are not sure whether to use a simple store pattern or a more advanced state management library like Vuex.

The Challenge

Explain how you would do state management in Vue. What are the different state management patterns that you would use, and what are the trade-offs between them?

Wrong Approach

A junior engineer might try to solve this problem by passing props down through multiple levels of components. This would be very difficult to maintain for a large application.

Right Approach

A senior engineer would know that a state management library like Vuex is the perfect tool for this job. They would be able to explain the different state management patterns and would have a clear plan for how to use Vuex to manage the state of a large application.

Step 1: Understand the Different State Management Patterns

PatternDescriptionProsCons
Simple Store PatternA simple, centralized store for all the components in an application.Easy to understand and implement.Can become difficult to maintain for a large application.
VuexA state management library for Vue.js applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion.Provides a more structured and maintainable way to manage the state of a large application.Can be more complex to set up than a simple store pattern.

Step 2: Choose the Right Tool for the Job

For our use case, we should use Vuex. This is because we are building a large application with a complex state that needs to be shared across multiple components.

Step 3: Code Examples

Here’s how we can use Vuex to manage the state of our application:

1. Create a store:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    increment(context) {
      context.commit('increment');
    }
  },
  getters: {
    count(state) {
      return state.count;
    }
  }
});

2. Use the store in a component:

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['count'])
  },
  methods: {
    ...mapActions(['increment'])
  }
};
</script>

Practice Question

You want to be able to access the state of your store from any component in your application. Which of the following would you use?