Vue errorCaptured 生命周期钩子

实例

使用 errorCaptured 生命周期挂钩捕获来自子组件的错误并向用户创建警报。

  1. <script>
  2. export default {
  3. errorCaptured() {
  4. alert("An error occurred");
  5. }
  6. }
  7. </script>

定义与用法

errorCaptured 当子/子组件中发生错误时,会调用生命周期钩子。

此钩子可用于错误处理、日志记录或向用户显示错误。

当使用 errorCaptured 钩子时,重要的是不要触发错误所在组件的呈现,因为这很可能会导致无限循环。

关于错误的信息在 errorCaptured() 函数中有 3 个参数:

  1. 错误
  2. 触发错误的组件
  3. 错误源类型

发生错误的默认行为是从发生错误的组件传播或 'bubble up'(冒泡)。组件中发生的错误将向上移动到父组件,并继续向上移动,最终在控制台中显示错误消息。

通过运行 return false;errorCaptured() 函数内部,错误不会最终出现在父组件中(停止传播),并且错误也不会最终在控制台中显示为错误消息。错误处理也可以使用 app.config.errorHandler 函数进行设置。


更多实例

实例 1

使用 errorCaptured 生命周期钩子捕获错误并将有关该错误的信息写入控制台。

App.vue:

  1. <template>
  2. <h1>The 'errorCaptured' Lifecycle Hook</h1>
  3. <p>Whenever there is an error in a child component, the errorCaptured() function is called on the parent.</p>
  4. <p>Open the browser console to see the captured error details.</p>
  5. <div>
  6. <comp-one></comp-one>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. errorCaptured(error,compInst,errorInfo) {
  12. console.log("error: ", error);
  13. console.log("compInst: ", compInst);
  14. console.log("errorInfo: ", errorInfo);
  15. }
  16. }
  17. </script>
  18. <style>
  19. #app > div {
  20. border: dashed black 1px;
  21. border-radius: 10px;
  22. padding: 10px;
  23. margin-top: 10px;
  24. background-color: lightgreen;
  25. }
  26. </style>

ComOne.vue:

  1. <template>
  2. <h2>Component</h2>
  3. <p>This is the component</p>
  4. <button @click="generateError">Generate Error</button>
  5. </template>
  6. <script>
  7. export default {
  8. methods: {
  9. generateError() {
  10. this.$refs.objEl.innerHTML = "hi";
  11. }
  12. }
  13. }
  14. </script>
实例 2

使用 errorCaptured 生命周期钩子,返回 return false; 以阻止错误传播。

App.vue:

  1. <template>
  2. <h1>The 'errorCaptured' Lifecycle Hook</h1>
  3. <p>Whenever there is an error in a child component, the errorCaptured() function is called on the parent.</p>
  4. <p>Open the browser console to see the captured error details.</p>
  5. <div>
  6. <comp-one></comp-one>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. errorCaptured(error,compInst,errorInfo) {
  12. console.log("error: ", error);
  13. console.log("compInst: ", compInst);
  14. console.log("errorInfo: ", errorInfo);
  15. return false;
  16. }
  17. }
  18. </script>
  19. <style>
  20. #app > div {
  21. border: dashed black 1px;
  22. border-radius: 10px;
  23. padding: 10px;
  24. margin-top: 10px;
  25. background-color: lightgreen;
  26. }
  27. </style>

ComOne.vue:

  1. <template>
  2. <h2>Component</h2>
  3. <p>This is the component</p>
  4. <button @click="generateError">Generate Error</button>
  5. </template>
  6. <script>
  7. export default {
  8. methods: {
  9. generateError() {
  10. this.$refs.objEl.innerHTML = "hi";
  11. }
  12. }
  13. }
  14. </script>

关联页面

Vue 教程: Vue 生命周期钩子

Vue 教程: errorCaptured 钩子

分类导航