Vuex抱怨说,如果不调用Vue.use(Vuex),就无法创建新的商店实例。虽然这通常没问题,但我正在摆弄使用同一商店编写后端/前端的想法。有人知道答案吗?
感谢。
答案 0 :(得分:6)
不,你不能在没有Vue的情况下使用Vuex。这是因为:
话虽这么说,你确实需要Vue,但你不需要Vue实例。你甚至不需要浏览器。
所以是的,它在服务器端非常有用,独立。
例如,您可以使用Node.js运行它,如下所示:
创建示例项目:
npm init -y
安装依赖项(注意:axios不是必需的,我们只为此演示添加它):
npm install --save vue vuex axios
创建一个脚本( index.js ):
const axios = require('axios');
const Vue = require('vue');
const Vuex = require('vuex');
Vue.use(Vuex);
const store = new Vuex.Store({
strict: true,
state: {name: "John"},
mutations: {
changeName(state, data) {
state.name = data
}
},
actions: {
fetchRandomName({ commit }) {
let randomId = Math.floor(Math.random() * 12) + 1 ;
return axios.get("https://reqres.in/api/users/" + randomId).then(response => {
commit('changeName', response.data.data.first_name)
})
}
},
getters: {
getName: state => state.name,
getTransformedName: (state) => (upperOrLower) => {
return upperOrLower ? state.name.toUpperCase() : state.name.toLowerCase()
}
}
});
console.log('via regular getter:', store.getters.getName);
console.log('via method-style getter:', store.getters.getTransformedName(true));
store.commit('changeName', 'Charles');
console.log('after commit:', store.getters.getName);
store.dispatch('fetchRandomName').then(() => {
console.log('after fetch:', store.getters.getName);
});
运行它:
node index.js
输出:
via regular getter: John
via method-style getter: JOHN
after commit: Charles
after fetch: Byron