javascript - 将 axios 响应错误存储在 axios store 中并在组件内处理它是一种好习惯吗?
问题描述
我计划通过 axios 通过 vuex 执行所有服务器 CRUDing 传输。喜欢:
actions: { // dispatch
createCategory(ctx) {
return axios.post(process.env.API_URL + "category/create/", category)
.then(response => {
ctx.commit('UPDATE_CATEGORY', response.data.updated_category);
return response;
}).catch(error => {
return error;
})
...
然后在组件中调用它们
this.$store.dispatch("createCategory", category)
.then(response => { DO NOTIFICATION STUFF }
.catch(error => { this.errors = error }
(我可能需要 axios 中的 promise 和 reject() 来捕获错误,但这不是重点)
我的问题是我应该在本地以这种方式(组件)处理错误,还是应该使用 vuex 状态在全局范围内处理它
actions: { // dispatch
createCategory(ctx) {
return axios.post(process.env.API_URL + "category/create/", category)
.then(response => {
ctx.commit('UPDATE_CATEGORY', response.data.updated_category);
return response;
}).catch(error => {
ctx.commit('SET_ERROR', error)
})
...
并调用组件中的错误,例如:this.$store.getters['getErrors']
?
(这里的例子有点抽象,只是为了解释)
那么哪种方式更好的做法是在组件内本地或在 vuex 存储中全局处理错误?
解决方案
除非您打算与多个不同的组件共享错误状态,否则我将在组件内本地处理错误。
如果不需要,我通常会避免使用 Vuex,因为它会增加很多开销。我使用 Vuex 的经验法则是:
- 仅当状态将被多个不相关的组件访问时才使用 Vuex
- 仅当状态由不是相关父组件的直接子组件的组件访问时才使用 Vuex
其他要考虑的事情是您使用什么Vuex
,它是组件状态管理还是数据状态管理。
如果将 Vuex 视为数据状态管理(特定数据的状态并且可以访问任何组件),那么在组件内本地处理错误更有意义。
如果您将 Vuex 视为组件状态管理(特定组件/页面的状态并且不会被其他组件访问),那么全局/在商店中处理它是有意义的,因为所有状态都特定于该特定组件,但我个人仍然会在本地处理它,除非我需要将状态共享给非直接子组件。我经常看到这被应用在一些 vue 应用程序上
除此之外,如果我在本地处理错误,我还更喜欢如何编写代码:
try {
store.doSomething();
catch (err) {
console.log("Failed to execute doSomething()");
}
这看起来比:
store.doSomething();
if (store.err) {
console.log("Failed to execute doSomething()");
}
推荐阅读
- android - 注册后,有什么方法可以对 android 和 iOS 使用相同的指纹认证?
- angular - 使用 gmail 登录在 Ionic 3 for IOS 中不起作用
- triggers - Azure Function App CosmosDBTrigger 被执行两次
- machine-learning - 灌溉中的机器学习方法
- javascript - 上传图像 onclick 蒙版图像而不是选择文件
- php - 如何使用来自数据库的下拉值插入列
- oracle - PLSQL:在过程中为一列的所有行分配一个值(数字)
- python - 如果字符串列表中存在字符串匹配,则查找文档内一行中存在的数字
- python - 在字符串中查找特殊字符笑脸
- laravel - 如何在laravel中从一对多关系中获取单条记录