Search code examples
vue.jsnuxt.jsvuex-modules

Setting value to input field using Vuex store modules


I have a vuex in module mode that fetching the data of a user:

store/modules/users.js

import axios from "axios";

export const state = () => ({
  user: {}
});

// Sets the values of data in states
export const mutations = {
  SET_USER(state, user) {
    state.user = user;
  }
};

export const actions = {
  fetchUser({ commit }, id) {
    console.log(`Fetching User with ID: ${id}`);
    return axios.get(`${process.env.BASE_URL}/users/${id}`)
      .then(response => {
        commit("SET_USER", response.data.data.result);
      })
      .catch(err => {
        console.log(err);
      });
  }
};

// retrieves the data from the state
export const getters = {
  getUser(state) {
    return state.user;
  }
};

then on my template pages/users/_id/index.vue

<b-form-input v-model="name" type="text"></b-form-input>

export default {
  data() {
    return {
      name: ""
    }
  },
  created() {
    // fetch user from API
    this.$store.dispatch("fetchUser", this.$route.params.id);
  }
}

Now I check the getters I have object getUser and I can see the attribute. How can I assign the name value from vuex getters to the input field?


Solution

  • watcher is probably what you need

    export default {
      // ...
      watch: {
        '$store.getters.getUser'(user) {
          this.name = user.name;
        },
      },
    }