Vuejs2 Vuex:如何在操作中正确添加已调度的操作

Vuejs2 Vuex:如何在操作中正确添加已调度的操作,vuejs2,vuex,Vuejs2,Vuex,当我在一个调度操作(如下面的saveDisplayLimitQuantity)中发布帖子后,我进行了一些修改以显示横幅,然后在5秒钟后将其隐藏。 我必须将这个逻辑添加到每个已调度的操作中,这样就有很多重复的代码 saveDisplayLimitQuantity: (context, data) => { return axios.post(data.url, { display_limit: data.display_limit }) .then(r

当我在一个调度操作(如下面的
saveDisplayLimitQuantity
)中发布帖子后,我进行了一些修改以显示横幅,然后在5秒钟后将其隐藏。
我必须将这个逻辑添加到每个已调度的操作中,这样就有很多重复的代码

saveDisplayLimitQuantity: (context, data) => {
    return axios.post(data.url, {
        display_limit: data.display_limit
    })
    .then(response => {
        context.commit('setShowBanner', true);
        context.commit('setBannerMessage', ['Display Limit Quantity Successully Updated!']);
        context.commit('setBannerStatus', 'Success');
        setTimeout(() => {
            context.commit('setShowBanner', false);
            context.commit('setBannerMessage', null);
            context.commit('setBannerStatus', null);
        }, 5000)
    })
    .catch(err => {
        context.commit('setShowBanner', true);
        context.commit('setBannerMessage', ['Something Went Wrong.  Please try again']);
        context.commit('setBannerStatus', 'Error');
        setTimeout(() => {
            context.commit('setShowBanner', false);
            context.commit('setBannerMessage', null);
            context.commit('setBannerStatus', null);
        }, 5000)
    })
},
我想做一件事,我可以在回信中承诺,我每次都可以打电话,只需传递一条信息。我尝试通过添加
dispatch
作为参数来执行此操作,但仍然不起作用:

saveDisplayLimitQuantity: (context, data, dispatch) => {
    return axios.post(data.url, {
        display_limit: data.display_limit
    })
    .then(response => {
        let data = {
             'status': 'Success', 
              'message': "Yay!"
        }
        dispatch('showBanner',data)
    })
    .catch(err => {
        let data = {
             'status': 'Error', 
              'message': "Please try again"
        }
        dispatch('showBanner',data)
    })
},

showBanner: (context,data) => {
    context.commit('showBanner', true);
    context.commit('bannerMessage', data.message);
    context.commit('bannerStatus', data.status);
}

它不工作,因为您没有正确访问操作
showBanner
。在第一个示例中,您使用了
context.commit()
来访问
变异。因此,要访问
操作
,您需要遵循相同的规则:

您不需要传递
dispatch
参数,只需通过
上下文调用
操作

context.dispatch('showBanner', data);
或者更好地使用
上下文
对象。它可以避免您反复调用
上下文

saveDisplayLimitQuantity({ dispatch }, data) {
   ... 
   dispatch('showBanner', data);
}