vuex:从异步函数设置默认值

时间:2017-06-01 09:47:31

标签: javascript vue.js state store vuex

我有以下商店:

export const store = new Vuex.Store({
    state: {
        someProp: someAsyncFn().then(res => res),
        ...
    },
    ...
})

看起来someProp似乎没有等待要解析的值。这是不好的做法吗?我应该将空对象设置为默认值并通过加载时的突变来更新状态吗?

1 个答案:

答案 0 :(得分:1)

你应该这样做:

export const store = new Vuex.Store({
    state: {
        someProp: null
        ...
    },
    mutations:{
        initializeSomeOrop: (state, payload) => {
            state.someProp = payload;
        }
    },
    actions:{
        asyncSomeProp: ({commit}) => {
            someAsyncFn().then(res => commit('initializeSomeProp', res))
        } 
    }
}) 

异步功能应由操作处理。您可以通过将异步回调中获得的asyncSomeProp作为有效负载参数传递来使用此操作initializeSomeOrop并提交变异res

然后,如果您要在某个组件中初始化someProp,那么您可以在该组件的已创建生命周期挂钩中调度asyncSomeProp操作,如下所示:

created(){
    this.$store.dispatch('asyncSomeProp');
}