Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript vuex:从异步函数设置默认值_Javascript_Vue.js_State_Store_Vuex - Fatal编程技术网

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

Javascript vuex:从异步函数设置默认值,javascript,vue.js,state,store,vuex,Javascript,Vue.js,State,Store,Vuex,我有以下商店: export const store = new Vuex.Store({ state: { someProp: someAsyncFn().then(res => res), ... }, ... }) 不知何故,看起来someProp没有等待值被解析。这是坏习惯吗?我是否应该将空对象设置为默认值并通过加载时的变异更新状态?您应该这样做: export const store = new Vuex.Store({

我有以下商店:

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

不知何故,看起来someProp没有等待值被解析。这是坏习惯吗?我是否应该将空对象设置为默认值并通过加载时的变异更新状态?

您应该这样做:

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))
        } 
    }
}) 
异步功能应该由操作来处理。通过将异步回调中获得的res作为有效负载参数传递,可以使用此操作asyncSomeProp和commit a mutation initializeSomeOrop

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

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