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);
}