Как обновить свойства $ auth.user в Nuxt.js?

Когда я хочу обновить $auth.user.balance:

methods:{
   test(){
      this.$auth.user.balance = 10;
   }
}

Но возвращает ошибку:

Error: [vuex] do not mutate vuex store state outside mutation handlers.

Как я могу обновить эти свойства vuex в Nuxtjs?

2 ответа

Решение

Nuxt предоставляет $auth.setUser() метод для установки пользователя.

Использовать $auth.setUser() вот так:

const updatedUser = {...this.$auth.user}
updatedUser.balance = 10;
this.$auth.setUser(updatedUser)

Обновление данных в магазине всегда должно быть неизменным.

Поэтому создайте новую ссылку на объект, прежде чем передавать ее в setUser чтобы избежать проблемы реактивности.

Когда вы используете Vuex, вы должны только изменять свое состояние посредством ваших мутаций, в вашем Vuex вы должны создать мутацию, подобную этой:

  setBalance(state, payload) {
    auth.user.balance = payload;
  },

и в вашем компоненте вам нужно отобразить новую мутацию в вашем methods,

 ...mapMutations('auth', ['setBalance']),

не забудьте импортировать mapMutations из vuex

import { mapMutations } from 'vuex';

и в вашем компоненте, когда вы хотите установить новое значение для баланса, вы вызываете

 test(){
         let newValue = 10;
         this.setBalance(newValue);
       }

Вы можете узнать больше о мутациях в магазине Vuex здесь, в документации Vuex.

Другие вопросы по тегам