vuex 错误 - 不要在突变处理程序之外改变 vuex 存储状态

Posted

技术标签:

【中文标题】vuex 错误 - 不要在突变处理程序之外改变 vuex 存储状态【英文标题】:vuex error - do not mutate vuex store state outside mutation handlers 【发布时间】:2022-01-21 00:50:51 【问题描述】:

我需要帮助。

我正在使用 Quasar 2(Vue 3 框架)。

为什么state.authorization = data.data.data.authorization; in mutation 返回“[vuex] do not mutate vuex store state outside mutation handlers”错误?

商店

import  reactive  from 'vue'
import axios from 'axios'
import  SessionStorage  from 'quasar'

import  LOGIN  from './actions'
import AuthService from './service'

const state = reactive(
  authorization: SessionStorage.getItem('authorization') || null
);

const getters = 
  getAuthorization: state => state.authorization
;

const actions = 
  // Login
  [LOGIN]: ( commit , data) => 
    return AuthService.login(data).then(
      data => 
        commit(LOGIN,  data: data );
        return Promise.resolve(data);
      ,
      error => 
        commit(LOGIN_ERROR);
        return Promise.reject(error);
      
    );
  


const mutations = 
  // Login
  [LOGIN]: (state, data) => 
    SessionStorage.set('authorization', data.data.data.authorization);
    state.authorization = data.data.data.authorization;
    axios.defaults.headers.common['Authorization'] = 'Bearer ' + data.data.data.authorization;
  


export default 
  state,
  getters,
  actions,
  mutations
;

在 .vue 文件中

let data = 
  email: email.value,
  password: password.value
;

store.dispatch(LOGIN, data).then(...

谢谢!

【问题讨论】:

你为什么断定是突变内部的代码触发了警告? state 不应该是 reactive,这是由 Vuex 完成的 感谢您的回复。如果我评论“state.authorization = data.data.data.authorization;”然后它可以工作,但我需要更改状态。 【参考方案1】:

变化

const state = 
  authorization: SessionStorage.getItem('authorization') || null
;

const state = () => (
  authorization: SessionStorage.getItem('authorization') || null
);

解决了问题。

【讨论】:

以上是关于vuex 错误 - 不要在突变处理程序之外改变 vuex 存储状态的主要内容,如果未能解决你的问题,请参考以下文章

错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态

vuex 错误 - 不要在突变处理程序之外改变 vuex 存储状态

nuxt vuex:不要在突变处理程序之外改变 vuex 存储状态

Vuex - '不要在突变处理程序之外改变 vuex 存储状态'

在 nuxt 中出现此错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态

Vuex 和 VueJS(不要在突变处理程序之外改变 vuex 存储状态)