آموزش رایگان 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، می‌توانید داده‌ها را به صورت دقیق و قابل پیش‌بینی بین کامپوننت‌های والد و فرزند انتقال دهید و برنامه‌ای منظم و مقیاس‌پذیر بسازید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

نصب Node.js و Create React App: شروع پروژه‌های React.js به‌صورت آسان
28م شهریور 1402

نصب Node.js و Create React App: شروع پروژه‌های React.js به‌صورت آسان

مطالعه بیشتر
آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب
18م شهریور 1402

آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب

مطالعه بیشتر
راهنمای کامل تگ‌های متنی HTML و اصول سئو برای محتوا
18م مرداد 1402

راهنمای کامل تگ‌های متنی HTML و اصول سئو برای محتوا

مطالعه بیشتر
آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها
10م شهریور 1402

آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها

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

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

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

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

مطالعه بیشتر
آموزش اصول Web APIs و نحوه استفاده از آن‌ها در جاوا اسکریپت: راهنمای کامل با مثال‌ها
1م آبان 1403

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

مطالعه بیشتر
مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها
2م آبان 1403

مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها

مطالعه بیشتر
آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML
23م مرداد 1402

آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML

مطالعه بیشتر
آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای
12م آبان 1403

آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای

مطالعه بیشتر
استفاده از calc در CSS: محاسبات پویا برای طراحی‌های منعطف
12م آبان 1403

استفاده از calc در CSS: محاسبات پویا برای طراحی‌های منعطف

مطالعه بیشتر
کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب
11م آبان 1403

کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب

مطالعه بیشتر

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