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

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

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

یکی از اصول مهم در Vue.js و بسیاری از فریم‌ورک‌های مبتنی بر Component، انتقال داده‌ها بین کامپوننت‌ها است. در Vue.js، Props مکانیزمی است که امکان ارسال داده‌ها از کامپوننت والد (Parent) به کامپوننت فرزند (Child) را فراهم می‌کند. در این مقاله، به بررسی نحوه کار با Props، تعریف و انتقال آن‌ها بین کامپوننت‌ها و بهترین شیوه‌های استفاده از Props می‌پردازیم.


مفهوم Props در Vue.js

Props (که مخفف Properties است) به عنوان متغیرهایی تعریف می‌شوند که داده‌ها را از کامپوننت والد به کامپوننت فرزند ارسال می‌کنند. Props در کامپوننت فرزند مانند داده‌های معمولی قابل دسترسی هستند، اما تغییر در آن‌ها امکان‌پذیر نیست؛ به عبارتی Props فقط خواندنی (Read-Only) هستند.


نحوه تعریف و ارسال Props از والد به فرزند

برای انتقال Props از والد به فرزند، ابتدا Props را در قالب یک آرایه یا شیء در کامپوننت فرزند تعریف می‌کنیم، سپس در کامپوننت والد مقادیر Props را ارسال می‌کنیم.

مثال: ارسال Props از والد به فرزند

کامپوننت والد (ParentComponent.vue):




< template >
  < div >
    < h1 > Parent Component < / h1 >
    < ChildComponent :message = " parentMessage " / >
  < / div >
< / template >




import ChildComponent from './ChildComponent.vue' ;

export default {
  components : {
    ChildComponent
  } ,
  data ( ) {
    return {
      parentMessage : ' Hello from Parent Component '
    } ;
  }
} ;


کامپوننت فرزند (ChildComponent.vue):




< template >
  < div >
    < p > { { message } } < / p >
  < / div >
< / template >




export default {
  props : [ ' message ' ]
} ;


در این مثال:

  • parentMessage به عنوان داده‌ای در کامپوننت والد تعریف شده است.

  • با استفاده از :message="parentMessage" مقدار parentMessage به Props با نام message در کامپوننت فرزند ارسال می‌شود.

  • در ChildComponent.vue، message به عنوان یک Prop تعریف شده و مقدار آن در HTML نمایش داده می‌شود.


تعیین نوع Props و ویژگی‌های اضافی

Vue.js به شما اجازه می‌دهد نوع Props را تعیین کنید و ویژگی‌های خاصی برای آن‌ها در نظر بگیرید، مانند نوع داده، مقدار پیش‌فرض و الزامی بودن. این ویژگی‌ها باعث افزایش خوانایی و پایداری کد می‌شوند.

مثال تعیین نوع Props و مقدار پیش‌فرض:




export default {
  props : {
    message : {
      type : String,
      required : true,
      default : ' Default Message '
    } ,
    count : {
      type : Number ,
      default : 0
    }
  }
} ;


در این مثال:

  • Prop message از نوع String است و الزامی (required: true) است. اگر والد مقداری برای آن ارسال نکند، مقدار Default Message به آن اختصاص می‌یابد.

  • Prop count از نوع Number است و مقدار پیش‌فرض 0 دارد.


ارسال Props به صورت داینامیک

Props می‌توانند داینامیک باشند، به این معنی که مقدار آن‌ها در والد تغییر کند و این تغییرات به‌طور خودکار به فرزند منتقل می‌شوند.

مثال Props داینامیک:




< template >
  < div >
    < input v-model = " parentMessage " placeholder = " Enter message " / >
    < ChildComponent :message = " parentMessage " / >
  < / div >
< / template >




import ChildComponent from ' ./ChildComponent.vue ' ;

export default {
  components: {
    ChildComponent
  } ,
  data ( ) {
    return {
      parentMessage : ' '
    } ;
  }
} ;


در این مثال، هر بار که مقدار parentMessage تغییر کند، این تغییرات به صورت آنی به Prop message در ChildComponent منتقل می‌شود و نمایش داده می‌شود.


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

  • نام‌گذاری Props با دقت: سعی کنید از نام‌های توصیفی برای Props استفاده کنید تا مفهوم و هدف Prop مشخص باشد.

  • پرهیز از دستکاری مستقیم Props در فرزند: Props در Vue فقط خواندنی هستند. اگر نیاز دارید داده را در فرزند تغییر دهید، ابتدا آن را در یک متغیر جدید کپی کنید یا از والد درخواست تغییر دهید.

  • استفاده از Prop Validation: همیشه نوع Props و سایر ویژگی‌های آن‌ها را مشخص کنید تا از مشکلات احتمالی جلوگیری شود.

  • مدیریت Props در پروژه‌های بزرگ: برای پروژه‌های بزرگ و پیچیده، می‌توانید Props را در سطح کامپوننت‌های عمیق‌تر منتقل کنید یا از Vuex برای مدیریت حالت مرکزی استفاده کنید.


ارتباط کامپوننت‌های پیچیده با چندین Prop

گاهی ممکن است نیاز به ارسال چندین Prop به یک کامپوننت باشد. برای این کار، می‌توانید Props متعددی را در کامپوننت فرزند تعریف کنید و آن‌ها را در والد مقداردهی کنید.

مثال: ارسال چندین Prop به یک کامپوننت فرزند:

ParentComponent.vue:




< template >
  < ChildComponent :title = " parentTitle " :count = " parentCount " / >
< / template >




import ChildComponent from ' ./ChildComponent.vue ' ;

export default {
  components : {
    ChildComponent
  } ,
  data ( ) {
    return {
      parentTitle : ' Welcome ' ,
      parentCount : 10
    } ;
  }
} ;


ChildComponent.vue:




< template >
  < div >
    < h2 > { { title } } < / h2 >
    < p > Count: { { count } } < / p >
  < / div >
< / template >




export default {
  props : {
    title : String ,
    count : Number
  }
} ;


در اینجا، دو Prop title و count به ChildComponent ارسال می‌شوند و در فرزند نمایش داده می‌شوند.


جلوگیری از تداخل Props با default

گاهی ممکن است بخواهید مقدار پیش‌فرضی برای Props تعیین کنید، اما مقدار default تنها زمانی اعمال می‌شود که والد مقدار Prop را ارسال نکند.

مثال استفاده از مقدار پیش‌فرض در Props:




props : {
  status : {
    type : String ,
    default : ' active '
  }
}


اگر کامپوننت والد مقدار status را ارسال نکند، ChildComponent مقدار active را به عنوان مقدار پیش‌فرض برای status استفاده می‌کند.


ارتباط با داده‌های واکنش‌پذیر (Reactive) در Props

با توجه به اینکه Props در Vue فقط خواندنی هستند، اگر می‌خواهید از Props به عنوان داده‌ای واکنش‌پذیر استفاده کنید، باید آن‌ها را در یک متغیر جدید کپی کنید. این کار باعث می‌شود داده به صورت مستقل در کامپوننت فرزند قابل تغییر باشد بدون اینکه بر داده‌های والد تأثیر بگذارد.

مثال تبدیل Prop به داده قابل تغییر:




export default {
  props : [ ' initialCount ' ] ,
  data ( ) {
    return {
      count : this.initialCount
    } ;
  }
} ;


در این مثال، Prop initialCount به داده count کپی شده و اکنون به صورت مستقل و قابل تغییر است.


نتیجه‌گیری

Props یکی از ابزارهای قدرتمند در Vue.js برای انتقال داده‌ها بین کامپوننت‌ها است که به شما امکان می‌دهد برنامه‌هایی با ساختار کامپوننتی و مستقل ایجاد کنید. با استفاده صحیح از Props، می‌توانید داده‌ها را به صورت دقیق و قابل پیش‌بینی بین کامپوننت‌های والد و فرزند انتقال دهید و برنامه‌ای منظم و مقیاس‌پذیر بسازید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

مقدمه‌ای به رویدادها و دستورات در Vue.js: نحوه مدیریت و استفاده از v-on
28م شهریور 1402

مقدمه‌ای به رویدادها و دستورات در Vue.js: نحوه مدیریت و استفاده از v-on

مطالعه بیشتر
آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق
12م آبان 1403

آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق

مطالعه بیشتر
کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد
18م شهریور 1402

کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد

مطالعه بیشتر
استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل
16م آبان 1403

استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل

مطالعه بیشتر
آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها
28م مهر 1403

آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها

مطالعه بیشتر
واحدهای CSS مدرن: آموزش استفاده از vw، vh، vmin و vmax برای طراحی واکنش‌گرا
11م آبان 1403

واحدهای CSS مدرن: آموزش استفاده از vw، vh، vmin و vmax برای طراحی واکنش‌گرا

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

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

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

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

مطالعه بیشتر
چگونه اسکریپت‌های ساده جاوا اسکریپت را در مرورگر بنویسیم و اجرا کنیم: راهنمای کامل برای مبتدیان
2م مهر 1402

چگونه اسکریپت‌های ساده جاوا اسکریپت را در مرورگر بنویسیم و اجرا کنیم: راهنمای کامل برای مبتدیان

مطالعه بیشتر
آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع
4م شهریور 1402

آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع

مطالعه بیشتر
آموزش ترانزیشن‌ها و انیمیشن‌های نرم با CSS: ایجاد افکت‌های پویا و واکنش‌گرا
10م شهریور 1402

آموزش ترانزیشن‌ها و انیمیشن‌های نرم با CSS: ایجاد افکت‌های پویا و واکنش‌گرا

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

آموزش کامنت‌ها و کاراکترهای خاص در HTML و CSS: نحوه استفاده و مدیریت

مطالعه بیشتر

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