آموزش رایگان Vue.js

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

28م آذر 1404 محراب حسن زاده
درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

در Vue.js، Watchers ابزاری برای نظارت بر تغییرات در داده‌ها و اجرای کدهای خاص در پاسخ به این تغییرات هستند. Watchers به شما اجازه می‌دهند به‌صورت خودکار واکنش‌هایی را به تغییرات در متغیرها یا داده‌های خاص انجام دهید و از این طریق عملکردهای پیچیده‌تری را پیاده‌سازی کنید. در این مقاله با مفهوم Watchers، نحوه پیاده‌سازی آن‌ها و موارد استفاده رایج آشنا می‌شویم.


مفهوم Watcher در Vue.js

Watcher‌ها در Vue.js مانند یک "ناظر" بر روی داده‌ها عمل می‌کنند و هرگاه مقدار آن داده‌ها تغییر کند، بلافاصله کدهای مشخص‌شده را اجرا می‌کنند. این ابزار به ویژه زمانی که نیاز به انجام عملیات پس از تغییر داده دارید، مانند فراخوانی API، اعتبارسنجی داده‌ها و به‌روزرسانی رابط کاربری به صورت پویا، بسیار کاربردی است.


نحوه تعریف و استفاده از Watcher

Watchers در داخل شیء watch در یک کامپوننت Vue تعریف می‌شوند و هر Watcher نام داده‌ای را که باید نظارت شود به عنوان کلید و یک تابع به عنوان مقدار دریافت می‌کند.

مثال ساده از Watcher:




< div id = " app " >
  < input v-model = " name " placeholder = " Enter your name " / >
  < p > { { greeting } } < / p >
< / div >




  new Vue ( {
    el: ' #app ' ,
    data ( ) {
      return {
        name: ' ' ,
        greeting : ' '
      } ;
    } ,
    watch : {
      name ( newName ) {
        this.greeting = ` Hello , $ { newName } ! ` ;
      }
    }
  } ) ;


در این مثال:

  • Watcher name بر تغییرات مقدار name نظارت می‌کند.

  • هر بار که name تغییر کند، Watcher مقدار greeting را به‌روزرسانی می‌کند.


پارامترهای Watcher

Watcher‌ها به‌طور خودکار دو پارامتر newValue و oldValue را دریافت می‌کنند که به ترتیب مقدار جدید و مقدار قبلی داده نظارت‌شده هستند. این پارامترها به شما اجازه می‌دهند بر اساس تغییرات بین دو مقدار، واکنش مناسبی انجام دهید.

مثال استفاده از newValue و oldValue:




< div id = " app " >
  < input v-model = " counter " type = " number " / >
  < p > { { message } } < / p >
< / div >




  new Vue ( {
    el: ' #app ' ,
    data ( ) {
      return {
        counter : 0 ,
        message : ' '
      } ;
    } ,
    watch : {
      counter ( newVal , oldVal ) {
        this.message = ` Counter changed from $ { oldVal } to $ { newVal } ` ;
      }
    }
  } ) ;


در این مثال، هر بار که counter تغییر کند، Watcher تفاوت بین مقدار جدید و قبلی را در پیام message نشان می‌دهد.


Watchers برای نظارت بر شیء‌ها و آرایه‌ها

در صورتی که داده‌ای که می‌خواهید بر آن نظارت کنید، یک شیء یا آرایه باشد، می‌توانید از گزینه deep: true استفاده کنید تا Watcher بر تغییرات داخل شیء یا آرایه نظارت کند.

مثال: نظارت بر یک شیء با deep




< div id = " app " >
  < button @click = " updateUser " > Update User < / button >
  < p > { { user } } < / p >
< / div >




  new Vue ( {
    el : ' #app ' ,
    data ( ) {
      return {
        user : {
          name : ' John ' ,
          age : 30
        }
      } ;
    } ,
    methods : {
      updateUser ( ) {
        this.user.age++ ;
      }
    } ,
    watch : {
      user : {
        handler ( newVal ) {
          console.log ( ' User data changed: ' , newVal ) ;
        } ,
        deep : true
      }
    }
  } ) ;


در این مثال:

  • Watcher user به‌صورت deep تعریف شده است و در نتیجه بر تغییرات داخلی شیء user نظارت می‌کند.

  • هر بار که ویژگی age در user تغییر کند، Watcher فعال شده و پیام تغییرات را به کنسول چاپ می‌کند.


Watchers و عملیات غیرهمزمان (Async)

یکی از ویژگی‌های قدرتمند Watchers امکان اجرای عملیات غیرهمزمان مانند فراخوانی API‌ها است. برای مثال، هر بار که کاربر داده‌ای را تغییر دهد، می‌توانید یک API را فراخوانی کرده و داده‌ها را به‌روزرسانی کنید.

مثال استفاده از عملیات غیرهمزمان در Watcher




< div id = " app " >
  < input v-model = " searchTerm " placeholder = " Search " / >
  < ul >
    < li v-for = " result in results " :key = " result.id " > { { result.name } } < / li >
  < / ul >
< / div >




  new Vue ( {
    el : ' #app ' ,
    data ( ) {
      return {
        searchTerm : ' ' ,
        results : [ ]
      } ;
    } ,
    watch : {
      searchTerm : async function ( newTerm ) {
        if ( newTerm ) {
          const response = await fetch( ` https://api.example.com/search?q=${newTerm} ` ) ;
          const data = await response.json ( ) ;
          this.results = data.results ;
        } else {
          this.results = [ ] ;
        }
      }
    }
  } ) ;


در این مثال، Watcher searchTerm به هر تغییر در فیلد جستجو واکنش نشان می‌دهد و اگر مقدار searchTerm خالی نباشد، یک درخواست به API ارسال کرده و نتایج را به‌روزرسانی می‌کند.


زمانبندی و بهینه‌سازی Watchers

در مواقعی که داده به سرعت تغییر می‌کند (مانند تایپ سریع در یک فیلد)، می‌توانید از دی‌بونسیگ (Debouncing) استفاده کنید تا عملیات تکراری و غیرضروری کاهش یابد. با استفاده از setTimeout می‌توانید تغییرات متوالی را مدیریت کنید.

مثال دی‌بونسیگ Watcher:




watch : {
  searchTerm ( newTerm ) {
    clearTimeout ( this.debounce ) ;
    this.debounce = setTimeout( async () => {
      if ( newTerm ) {
        const response = await fetch( ` https://api.example.com/search?q=${newTerm} ` ) ;
        const data = await response.json ( ) ;
        this.results = data.results ;
      } else {
        this.results = [ ] ;
      }
    } , 300 ); // تاخیر 300 میلی‌ثانیه برای کاهش فراخوانی‌های اضافی
  }
}


در این مثال، هر بار که searchTerm تغییر کند، تایمر debounce بازنشانی می‌شود و پس از 300 میلی‌ثانیه عملیات جستجو انجام می‌شود. این کار باعث کاهش تعداد درخواست‌های API می‌شود.


بهترین شیوه‌ها در استفاده از Watchers

  • استفاده از Watchers برای عملیات خاص: Watchers برای عملیات‌های واکنشی مانند فراخوانی API یا نظارت بر تغییرات پیچیده بسیار مناسب‌اند. برای تغییرات ساده در داده‌ها، استفاده از computed properties ممکن است بهینه‌تر باشد.

  • استفاده از deep: true با دقت: deep: true می‌تواند منجر به کاهش کارایی شود، زیرا هرگونه تغییر در یک شیء یا آرایه را تحت نظر می‌گیرد. در صورت امکان، از این ویژگی با احتیاط و فقط برای نظارت بر اشیاء بزرگ استفاده کنید.

  • دی‌بونسیگ (Debouncing) برای ورودی‌های متوالی: در صورتی که Watcher برای فیلدهای متنی یا ورودی‌های کاربر تعریف شده، از دی‌بونسیگ برای کاهش تعداد درخواست‌ها و افزایش کارایی استفاده کنید.


نتیجه‌گیری

Watchers در Vue.js ابزاری قدرتمند برای نظارت بر تغییرات در داده‌ها و انجام عملیات‌های مختلف مانند فراخوانی API و به‌روزرسانی رابط کاربری است. با درک صحیح از نحوه کار و بهترین شیوه‌های استفاده از Watchers، می‌توانید پروژه‌های Vue.js خود را بهبود داده و عملکرد برنامه را بهینه کنید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of
4م مهر 1403

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

مطالعه بیشتر
آموزش متغیرهای سفارشی (Custom Properties) در CSS: نحوه تعریف و استفاده از var
18م شهریور 1402

آموزش متغیرهای سفارشی (Custom Properties) در CSS: نحوه تعریف و استفاده از var

مطالعه بیشتر
مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها
28م مهر 1403

مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مطالعه بیشتر
کاربرد تگ‌های meta، title و keywords در سئو: راهنمای جامع بهینه‌سازی وب‌سایت
25م مرداد 1402

کاربرد تگ‌های meta، title و keywords در سئو: راهنمای جامع بهینه‌سازی وب‌سایت

مطالعه بیشتر
معرفی جاوا اسکریپت و نحوه استفاده از آن برای توسعه وب تعاملی: راهنمای جامع
27م شهریور 1402

معرفی جاوا اسکریپت و نحوه استفاده از آن برای توسعه وب تعاملی: راهنمای جامع

مطالعه بیشتر
آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر
2م بهمن 1402

آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر

مطالعه بیشتر
آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی
23م مرداد 1402

آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی

مطالعه بیشتر
روش‌های کار با Conditional و Loop در Vue.js | آموزش v-if، v-show و v-for
28م آذر 1404

روش‌های کار با Conditional و Loop در Vue.js | آموزش v-if، v-show و v-for

مطالعه بیشتر
آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش
2م شهریور 1403

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

مطالعه بیشتر
آموزش دسترسی به المان‌های HTML با استفاده از جاوا اسکریپت: راهنمای کامل با مثال‌ها
2م آبان 1403

آموزش دسترسی به المان‌های HTML با استفاده از جاوا اسکریپت: راهنمای کامل با مثال‌ها

مطالعه بیشتر
درک Props و انتقال داده‌ها بین کامپوننت‌ها در Vue.js | آموزش کاربردی
24م آذر 1404

درک Props و انتقال داده‌ها بین کامپوننت‌ها در Vue.js | آموزش کاربردی

مطالعه بیشتر
عملگرها و عبارات محاسباتی در جاوا اسکریپت: نحوه استفاده و کاربردهای مختلف
28م شهریور 1402

عملگرها و عبارات محاسباتی در جاوا اسکریپت: نحوه استفاده و کاربردهای مختلف

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد