فهرست سرفصل‌های Vue
خانه (HOME) معرفی (Intro) دایرکتیوها (Directives) v-bind (v-bind) v-if (v-if) v-show (v-show) v-for (v-for) رویدادها (Events) v-on (v-on) متدها (Methods) تغییردهنده های رویداد (Event Modifiers) فرم ها (Forms) v-model (v-model) بایندینگ CSS (CSS Binding) ویژگی های محاسبه شده (Computed Properties) واچرها (Watchers) قالب ها (Templates) چرا، چگونه و راه اندازی (Why, How and Setup) اولین صفحه SFC (First SFC Page) کامپوننت ها (Components) پراپس (Props) کامپوننت های v-for (v-for Components) $emit() ($emit()) ویژگی های عبوری (Fallthrough) (Fallthrough Attributes) استایل Scoped (Scoped Styling) کامپوننت های محلی (Local Components) اسلات ها (Slots) v-slot (v-slot) اسلات های Scoped (Scoped Slots) کامپوننت های پویا (Dynamic Components) Teleport (Teleport) درخواست HTTP (HTTP Request) رفرنس های تمپلیت (Template Refs) هوک های چرخه عمر (Lifecycle Hooks) Provide/Inject (Provide/Inject) مسیریابی (Routing) ورودی های فرم (Form Inputs) انیمیشن ها (Animations) انیمیشن با v-for (Animations with v-for) بیلد (Build) Composition API (Composition API) ویژگی های توکار (Built-in Attributes) ویژگی 'is' ('is' Attribute) ویژگی 'key' ('key' Attribute) ویژگی 'ref' ('ref' Attribute) کامپوننت های توکار (Built-in Components) <KeepAlive> (<KeepAlive>) <Teleport> (<Teleport>) <Transition> (<Transition>) <TransitionGroup> (<TransitionGroup>) المان های توکار (Built-in Elements) <component> (<component>) <slot> (<slot>) <template> (<template>) نمونه کامپوننت (Component Instance) $attrs ($attrs) $data ($data) $el ($el) $parent ($parent) $props ($props) $refs ($refs) $root ($root) $slots ($slots) $emit() ($emit()) $forceUpdate() ($forceUpdate()) $nextTick() ($nextTick()) $watch() ($watch()) دایرکتیوها (Directives) v-bind (v-bind) v-cloak (v-cloak) v-for (v-for) v-html (v-html) v-if (v-if) v-else-if (v-else-if) v-else (v-else) v-memo (v-memo) v-model (v-model) v-on (v-on) v-once (v-once) v-pre (v-pre) v-show (v-show) v-slot (v-slot) v-text (v-text) گزینه های نمونه (Instance Options) داده ها (data) متدها (methods) محاسبه شده ها (computed) watch (watch) پراپس (props) emits (emits) expose (expose) هوک های چرخه عمر (Lifecycle Hooks) beforeCreate (beforeCreate) created (created) beforeMount (beforeMount) mounted (mounted) beforeUpdate (beforeUpdate) updated (updated) beforeUnmount (beforeUnmount) unmounted (unmounted) errorCaptured (errorCaptured) renderTracked (renderTracked) renderTriggered (renderTriggered) activated (activated) deactivated (deactivated) serverPrefetch (serverPrefetch) مثال ها (Examples) تمرین ها (Exercises) کوییز (Quiz) سیلابس (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
Vue

Vue — errorCaptured (errorCaptured)

آخرین بروزرسانی: 1404/08/21

errorCaptured (errorCaptured)

هوک «errorCaptured در ویو (Vue)» وقتی در فرزند خطا رخ دهد اجرا می شود. «هوک (Hook)» یعنی زمان آماده اجرای کد. اینجا می توانی خطا را گزارش دهی یا پیام نشان دهی. اما مراقب رندر دوباره باش. چون ممکن است حلقه بی پایان بسازد.

تعریف و کاربرد

این هوک هنگام خطا در یک کامپوننتِ فرزند یا نوادگان آن فراخوانی می شود. برای مدیریت خطا، ثبت گزارش، یا نمایش پیام مناسب است. به طور پیش فرض، خطا به والدین «حباب» می شود و در نهایت به کنسول می رسد.

نمونه کد پایه

یک پیام ساده هنگام رخداد خطا در فرزند نمایش بده.

<script>
export default {
  errorCaptured() {
    alert("An error occurred");
  }
}
<\/script>

مشاهده در ادیتور

آرگومان های تابع

تابع errorCaptured(error, compInst, errorInfo) سه ورودی دارد: خود خطا، نمونه کامپوننتِ خطاده، و نوع منبع خطا. با این اطلاعات تصمیم بگیر چه کنی.

جلوگیری از انتشار خطا

اگر داخل errorCaptured مقدار false برگردانی، خطا دیگر به والدین نمی رود و به کنسول هم نمی رسد. اما از تریگرِ رندر مجدد بپرهیز. چون می تواند چرخه بی پایان بسازد.

گام های عملی

  1. محل ثبت خطا را مشخص کن. کنسول یا سرور.
  2. تابع errorCaptured را در والد بنویس.
  3. در صورت نیاز return false را برگردان.
  4. از رندر دوباره منبع خطا جلوگیری کن.

مثال 1: ثبت جزئیات خطا

جزئیات خطا را در کنسول چاپ کن تا عیب یابی آسان شود.

<template>
  <h1>The 'errorCaptured' Lifecycle Hook</h1>
  <p>Open the console to see captured error details.</p>
  <div>
    <comp-one></comp-one>
  </div>
</template>

<script>
export default {
  errorCaptured(error, compInst, errorInfo) {
    console.log("error: ", error);
    console.log("compInst: ", compInst);
    console.log("errorInfo: ", errorInfo);
  }
}
<\/script>

مشاهده در ادیتور

<template>
  <h2>Component</h2>
  <p>This is the component</p>
  <button @click="generateError">Generate Error</button>
</template>

<script>
export default {
  methods: {
    generateError() {
      this.$refs.objEl.innerHTML = "hi";
    }
  }
}
<\/script>

مشاهده در ادیتور

مثال 2: متوقف کردن حباب خطا

با return false، خطا دیگر بالا نمی رود و به کنسول نمی رسد.

<template>
  <h1>The 'errorCaptured' Lifecycle Hook</h1>
  <p>The errorCaptured() runs on parent when child fails.</p>
  <div>
    <comp-one></comp-one>
  </div>
</template>

<script>
export default {
  errorCaptured(error, compInst, errorInfo) {
    console.log("error: ", error);
    console.log("compInst: ", compInst);
    console.log("errorInfo: ", errorInfo);
    return false;
  }
}
<\/script>

مشاهده در ادیتور

<template>
  <h2>Component</h2>
  <p>This is the component</p>
  <button @click="generateError">Generate Error</button>
</template>

<script>
export default {
  methods: {
    generateError() {
      this.$refs.objEl.innerHTML = "hi";
    }
  }
}
<\/script>

مشاهده در ادیتور

نکته ها

نکته: از رندر مجدد همان منبع خطا بپرهیز. حلقه خطا می سازد.

نکته: می توانی از app.config.errorHandler نیز برای مدیریت کلی استفاده کنی.

پیوندها

برای پیش از حذف، صفحه beforeUnmount را ببین. همچنین صفحه unmounted را بررسی کن. برای مطالعه «errorCaptured در ویو» همین صفحه مرجع توست.

جمع بندی سریع

  • errorCaptured هنگام خطای فرزند اجرا می شود.
  • سه ورودی مفید دارد.
  • با return false حباب متوقف می شود.
  • از رندر دوباره منبع خطا بپرهیز.
  • برای سیاست کلی از errorHandler استفاده کن.