فهرست سرفصل‌های 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 — $nextTick() ($nextTick())

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

$nextTick() ($nextTick())

متد $nextTick() یعنی «اجرای بعد از تیک بعدی». تیک (Tick) یک نوبت به روزرسانی DOM است. وقتی داده عوض می شود، DOM فوراً عوض نمی شود. بنابراین با $nextTick() صبر می کنیم تا DOM آپدیت شود، سپس کدمان اجرا شود.

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

$nextTick() اجرا را تا بعد از به روزرسانی DOM نگه می دارد. بنابراین ابتدا تغییرات واکنشی اعمال می شوند. سپس کالبک یا ادامه کد اجرا می شود. این کار هماهنگی داده و DOM را تضمین می کند.

نکته: می توانی از نسخه سراسری nextTick() هم بیرون از یک کامپوننت استفاده کنی.

مثال 1: استفاده با کالبک (Callback)

ابتدا متن را عوض می کنیم. سپس قبل و بعد از $nextTick() محتوا را می خوانیم تا تفاوت را ببینیم.

<script>
export default {
  methods: {
    updateMsg() {
      this.message = 'Hello! This is a new message.';
      this.results.push(this.$refs.pEl.textContent);
      this.$nextTick(() => {
        this.results.push(this.$refs.pEl.textContent + ' (using $nextTick())');
      });
    }
  }
};
<\/script>

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

مثال 2: استفاده async/await

اینجا با await صبر می کنیم تا DOM آپدیت شود. سپس مقدار تازه را می خوانیم.

<template>
  <div>
    <p ref="messageEl">{{ message }}</p>
    <button v-on:click.once="updateMsg">Update Message</button>
    <ol>
      <li v-for="x in results" :key="x">{{ x }}</li>
    </ol>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Initial Message',
      results: []
    };
  },
  methods: {
    async updateMsg() {
      this.message = 'Hello! This message is now updated.';
      this.results.push(this.$refs.messageEl.textContent);
      await this.$nextTick();
      this.results.push(this.$refs.messageEl.textContent + ' (after await $nextTick())');
    }
  }
};
<\/script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
}
<\/style>

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

گام های عملی

  1. داده واکنشی را تغییر بده.
  2. در صورت نیاز، مقدار فعلی DOM را بخوان.
  3. با $nextTick() صبر کن و دوباره DOM را بخوان.

هشدار: از $nextTick() فقط وقتی لازم است استفاده کن. استفاده بیهوده کد را پیچیده می کند.

لینک ها و ادامه مطالعه

مقایسه زمان بندی را با $forceUpdate() ببین. همچنین برای دسترسی مستقیم از $refs استفاده کن. برای تمرین، روی این لینک هم کلیک کن: به روزرسانی DOM با nextTick.

جمع بندی سریع

  • $nextTick() بعد از آپدیت DOM اجرا می شود.
  • با کالبک یا await قابل استفاده است.
  • برای هماهنگی داده و DOM عالی است.
  • زیاده روی نکن؛ فقط هنگام نیاز.