vuejs2 - Vuex:如何在动作中正确添加调度的动作
问题描述
在我以saveDisplayLimitQuanity
如下所示的已调度操作发布帖子后,我进行突变以显示横幅,然后 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)
})
},
我想做一个可以放入返回的 Promise 的操作,我可以每次调用它并传入一条消息。我尝试通过添加作为参数来这样做,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()
访问过mutation
. 因此,为了访问action
您需要遵循相同的规则:
而不是传递dispatch
参数,您只需要调用action
它context
:
context.dispatch('showBanner', data);
甚至更好地使用argument destructuring
在context
对象上。它使您免于context
一遍又一遍地调用:
saveDisplayLimitQuantity({ dispatch }, data) {
...
dispatch('showBanner', data);
}
推荐阅读
- databricks - Databricks:添加 Maven 依赖项时出错:由于临时 Maven 问题,无法下载某些库
- arrays - 如何将具有重复字段值的表格数据转换为层次结构的 JSON?
- java - 如何将 TextView 中的文本设置为字符串(AndriodStudio)?
- javascript - reactjs将事件传递到下一页
- omnet++ - 使用 OMNT++ 和 VEINS 执行重要模拟的硬件要求是什么?
- bookshelf.js - bookshelf.js 检索模型名称并通过 virtuals-plugin #beginner 将其分配给实例
- sql - ASP.net - “错误的语法靠近“=”
- python - 函数中的两个 for 循环
- python - keras model.fit 函数打印的准确率与验证集或训练集有关吗?
- javascript - Jquery lightgallery 如何关闭字幕