是否可以在没有Vue的情况下使用Vuex? (Vuex服务器端?)

时间:2018-04-06 02:37:30

标签: javascript node.js vue.js vuex

Vuex抱怨说,如果不调用Vue.use(Vuex),就无法创建新的商店实例。虽然这通常没问题,但我正在摆弄使用同一商店编写后端/前端的想法。有人知道答案吗?

感谢。

1 个答案:

答案 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