Vue.js VUEX存储类型的正确设置和使用

Vue.js VUEX存储类型的正确设置和使用,vue.js,vuex,Vue.js,Vuex,我正在使用来自Github的Vue js样板之一开发一个Chrome扩展。默认样板设置如下所示: store/index.js import Vue from 'vue'; import Vuex from 'vuex'; import mutations from './mutations'; import * as actions from './actions'; // all actions are imported as separate vars Vue.use(Vuex)

我正在使用来自Github的Vue js样板之一开发一个Chrome扩展。默认样板设置如下所示:

store/index.js

import Vue from 'vue';
import Vuex from 'vuex';

import mutations from './mutations';
import * as actions from './actions';    // all actions are imported as separate vars

Vue.use(Vuex);

export default new Vuex.Store({
    state: {    },
    mutations,
    actions
});
import * as types from './mutation-types';

export const setFoo = ({ commit }, payload) => {
    commit(types.SET_FOO, payload);    // SET_FOO is defined in the mutation-types file
};
...
import actions from './actions';    // actions are imported as separate functions
...
import * as types from './mutation-types';

export default {
    [types.UPDATE_FOO] ({commit}, payload) {
        commit(types.UPDATE_FOO, payload);
    }
}
然后在actions.js中

import Vue from 'vue';
import Vuex from 'vuex';

import mutations from './mutations';
import * as actions from './actions';    // all actions are imported as separate vars

Vue.use(Vuex);

export default new Vuex.Store({
    state: {    },
    mutations,
    actions
});
import * as types from './mutation-types';

export const setFoo = ({ commit }, payload) => {
    commit(types.SET_FOO, payload);    // SET_FOO is defined in the mutation-types file
};
...
import actions from './actions';    // actions are imported as separate functions
...
import * as types from './mutation-types';

export default {
    [types.UPDATE_FOO] ({commit}, payload) {
        commit(types.UPDATE_FOO, payload);
    }
}
我认为上面的方法缺乏一个基本的原因,为什么我们要使用突变类型文件-以避免重新键入突变和动作的名称

因此,我提出了一种不同的方法:

store/index.js

import Vue from 'vue';
import Vuex from 'vuex';

import mutations from './mutations';
import * as actions from './actions';    // all actions are imported as separate vars

Vue.use(Vuex);

export default new Vuex.Store({
    state: {    },
    mutations,
    actions
});
import * as types from './mutation-types';

export const setFoo = ({ commit }, payload) => {
    commit(types.SET_FOO, payload);    // SET_FOO is defined in the mutation-types file
};
...
import actions from './actions';    // actions are imported as separate functions
...
import * as types from './mutation-types';

export default {
    [types.UPDATE_FOO] ({commit}, payload) {
        commit(types.UPDATE_FOO, payload);
    }
}
然后在actions.js中

import Vue from 'vue';
import Vuex from 'vuex';

import mutations from './mutations';
import * as actions from './actions';    // all actions are imported as separate vars

Vue.use(Vuex);

export default new Vuex.Store({
    state: {    },
    mutations,
    actions
});
import * as types from './mutation-types';

export const setFoo = ({ commit }, payload) => {
    commit(types.SET_FOO, payload);    // SET_FOO is defined in the mutation-types file
};
...
import actions from './actions';    // actions are imported as separate functions
...
import * as types from './mutation-types';

export default {
    [types.UPDATE_FOO] ({commit}, payload) {
        commit(types.UPDATE_FOO, payload);
    }
}
然后,在扩展中的任何地方,我们也可以导入变异类型并使用常量名称分派操作,如下所示:

store.dispatch(types.UPDATE_FOO, 'some value');
第二种方法在命名和分派/提交我们的动作/突变方面似乎更为实用。或者最新版本会有什么问题吗


以上哪一项通常是更好的练习?

第一种方法更可取,但完全取决于您。官方
Vuex
文档中也使用了类似的方法。


第一种方法更可取,但完全取决于您。官方
Vuex
文档中也使用了类似的方法。


你能解释一下为什么第一种方法更可取吗?
Vuex
中的常见做法是存储你的
突变
类型,而不是
动作
类型,因此有些人可能会感到困惑。当然,您也可以创建自己的
Vuex
store创建风格。例如,本文作者还使用了
action
类型:。您能解释一下为什么第一种方法更可取吗?在
Vuex
中,通常的做法是存储您的
突变
类型,而不是
action
类型,因此有些人可能会感到困惑。当然,您也可以创建自己的
Vuex
store创建风格。例如,本文作者还使用
操作
类型:。