前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(二十六)组件错误处理

(二十六)组件错误处理

作者头像
老怪兽
发布2023-02-22 17:13:24
2780
发布2023-02-22 17:13:24
举报
文章被收录于专栏:老怪兽的前端之旅

组件错误处理,全局错误处理

一、全局处理错误

  1. 我们正在组件当中,自定义一个未抛出的错误
代码语言:javascript
复制
<template>
  <ul>
    <AppListItem v-for="item in data">{{ item }}</AppListItem>
  </ul>
</template>
<script>
import AppListItem from "./AppListItem.vue";
export default {
  props: ["data"],
  components: {
    AppListItem,
  },
  mounted() {
    // 自定义一个未捕获的错误
    throw new Error("发生了异常");
  },
};
</script>
<style scoped></style>

2. 全局处理错误

代码语言:javascript
复制
import { createApp } from "vue";
import App from "./App.vue";

const app = createApp(App);

app.config.errorHandler = (err, vm, info) => {
  console.log(err)    // 错误信息
  console.log(vm)     // vue 实例
  console.log(info)   // 错误位置
}

app.mount("#app");

二、局部处理错误(错误边界)

说明

错误边界就像是事件冒泡一样,会一直网上冒到父组件,直到错误事件被捕获处理

  1. 边界捕获处理
代码语言:javascript
复制
<template>
  <li><slot></slot></li>
</template>
<script>
export default {
  mounted() {
    throw new Error("AppListItem 组件异常");
  },
};
</script>
<style scoped></style>

2. 组件处理错误

代码语言:javascript
复制
<template>
  <p v-if="error">啊哦,出错了!</p>
  <ul v-else>
    <AppListItem v-for="item in data">{{ item }}</AppListItem>
  </ul>
</template>
<script>
import AppListItem from "./AppListItem.vue";
export default {
  props: ["data"],
  data() {
    return {
      error: false,
    };
  },
  components: {
    AppListItem,
  },

  // 错误处理生命周期
  errorCaptured(err, instance, info) {
    console.log(err)          // 错误信息
    console.log(instance)     // 组件的实例
    console.log(info);        // 错误位置

    // 出错了通过错误DOM元素向用户说出错了
    this.error = true;
    // 停止错误事件错误向上传递
    return false;
  },
};
</script>
<style scoped></style>

总结:写在最后

总结

全局处理错误是直接在main.js 里面进行统一处理

如果是边界处理的话(也就是组件错误自己处理)的话,就需要用到生命周期钩子 errorCaptured() 来处理,如果错误没有处理的话他会一直网上冒泡, 到 App.vue 如果 App.vue 没有处理的话,就会把错误出现在控制台, 或者是组件当中处理错误了但是没有 return false 错误还是会一直网上冒泡的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月7日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 组件错误处理,全局错误处理
    • 一、全局处理错误
      • 二、局部处理错误(错误边界)
        • 总结:写在最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档