我将Vue应用程序重写为Nuxt架构,因为我们需要SSR。但是我不想重写Vuex存储文件,该文件是:
import Vue from "vue";
import Vuex from "vuex";
import vuexI18n from "vuex-i18n/dist/vuex-i18n.umd.js";
import toEnglish from "../translations/toEnglish";
import toSpanish from "./../translations/toSpanish";
import toGerman from "./../translations/toGerman";
import toRussian from "./../translations/toRussian";
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
currentLanguage: ''
},
mutations: {
changeLang: (state, response) => {
if(response) {
state.currentLanguage = response;
Vue.i18n.set(response);
console.log(response);
}
}
}
});
Vue.use(vuexI18n.plugin, store);
Vue.i18n.add("en", toEnglish);
Vue.i18n.add("es", toSpanish);
Vue.i18n.add("de", toGerman);
Vue.i18n.add("ru", toRussian);
export default store;
我知道Nuxt还有其他方法,但是我真的想坚持使用上面的代码。不幸的是,我无法通过以下方式从组件中调用突变:
this.$store.commit('changeLang', lang)
它在控制台中打印错误:
[vuex]未知突变类型:changeLang
我也这样尝试过
this.$store.commit('store/changeLang', lang)
但是错误是相同的。如何解决?我需要重写此vuex文件才能使其正常工作吗?
我遵循@Aldarund提示,并将上面的代码更改为:
import Vue from "vue";
import Vuex from "vuex";
import vuexI18n from "vuex-i18n/dist/vuex-i18n.umd.js";
import toEnglish from "../translations/toEnglish";
import toSpanish from "./../translations/toSpanish";
import toGerman from "./../translations/toGerman";
import toRussian from "./../translations/toRussian";
const store = () => {
return new Vuex.Store({
state: () => ({
currentLanguage: ''
}),
mutations: {
changeLang: (state, response) => {
if (response) {
state.currentLanguage = response;
Vue.i18n.set(response);
console.log(response);
}
}
}
})
};
Vue.use(vuexI18n.plugin, store);
Vue.i18n.add("en", toEnglish);
Vue.i18n.add("es", toSpanish);
Vue.i18n.add("de", toGerman);
Vue.i18n.add("ru", toRussian);
export default store;
现在错误是
未捕获的TypeError:store.registerModule不是函数
可能是因为Vue.use(vuexI18n.plugin, store);
。
答案 0 :(得分:2)
您需要使用经典模式。
经典(不建议使用):store / index.js返回创建 商店实例
因此,在导入Vue时应该看起来像这样,不使用vuex。而且它必须是crestr存储的函数,而不是普通的vuex对象
import Vuex from 'vuex'
const createStore = () => {
return new Vuex.Store({
state: () => ({
counter: 0
}),
mutations: {
increment (state) {
state.counter++
}
}
})
}
export default createStore
文档https://nuxtjs.org/guide/vuex-store/#classic-mode
关于插件,例如vyexi18,您需要将该代码移动到插件文件中,并从上下文https://nuxtjs.org/guide/plugins/
中创建存储对象export default ({ store }) => {
Your vuex18initcode
}