vuex未知动作(或突变)类型

时间:2019-05-21 08:41:52

标签: vuex store nuxt.js

我正在编写一个简单的代码来设置Nuxt应用程序中存储的令牌。当我尝试从商店中调用变异或操作时,控制台中会记录以下错误:[vuex]未知操作类型:setToken

import Vuex from 'vuex';

export const store = new Vuex.Store({
    state:()=> ({
        token: ''
    }),
    getters: {
        getToken: state => {
            return state.token;
        }
    },
    mutations: {
        setToken: (tokenStr) => {
            state.token = tokenStr;
        }
    },
    actions: {
        setToken: ({ commit }, tokenStr) => {
            commit('setToken', tokenStr);
        }
    }
})

这是尝试调用突变的方法:

methods:{
  setToken(){
    this.$store.dispatch('setToken','token1');
    this.token = this.$store.getters.token;
  }
}

2 个答案:

答案 0 :(得分:0)

您正在使用在nuxt中设置vuex存储的“经典”方法,现在已弃用。您应该这样设置:

// store/index.js
export const state = () => ({
  token: ''
})

export const mutations = {
  SET_TOKEN (state, tokenStr) {
    state.token = tokenStr
}

export const actions = {
  setToken ({ commit }, tokenStr) {
    commit('SET_TOKEN', tokenStr)
  }
}

export const getters = {
  token: (state) => state.token
}

Nuxt将从那里为您建立商店。您可以在文档here中看到它。

答案 1 :(得分:0)

您可以使用this。$ store.dispatch('xxx')调度组件中的操作,或使用mapActions帮助器将组件方法映射到store.dispatch调用(需要进行根存储注入): 尝试另一种调度操作的方法

    import { mapActions } from 'vuex'

export default {
  // ...
  methods: {
...mapActions([
  'increment', 
// map `this.increment()` to 

this.$store.dispatch('increment')

  // `mapActions` also supports payloads:
  'incrementBy' // map `this.incrementBy(amount)` to `this.$store.dispatch('incrementBy', amount)`
]),
...mapActions({
  add: 'increment' // map `this.add()` to `this.$store.dispatch('increment')`
})

} }