我正在编写一个简单的代码来设置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;
}
}
答案 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')`
})
} }