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

فرض کنیم صفحه‌ای داریم که مربوط به مدیریت کردن پست‌ها هست. برای این صفحه لازم داریم دسته‌بندی‌ها و تگ‌ها رو هم لود کنیم. چنین کامپوننتی برای اون می‌سازیم:

<template>
  <!-- View -->
</template>

<script>
export default {
  mounted() {
    this.getPosts();
    this.getCategories();
    this.getTags();
  },
  data() {
    return {
      posts: [],
      categories: [],
      tags: [],
      searchQuery: '',
    }
  },
  methods: {
    getPosts() { ... },
    filterPostsByCategory() { ... },
    filterPostsByUser() { ... },
    searchPost() { ... },

    getCategories() { ... },
    filterCategories() { ... },

    getTags() { ... },
    filterTags() { ... },
  }
}
</script>

توی این کامپوننت که از نوشتن آپشن‌های computed و watch صرف نظر کردیم. همونطور که می‌بینیم، کدهای مربوط به تگ‌ها و دسته‌بندی‌ها کنار هم قرار گرفتن. یکی از مشکلاتی که به وجود میاد اینه که کدهای نامربوط کنار هم قرار می‌گیرن که باعث میشه خوانایی و همچنین توسعه و اضافه کردن ویژگی‌های جدید سخت بشه. شاید راهی که به ذهنمون برسه این باشه که کامپوننت رو تقسیم کنیم به کامپوننت‌های کوچیک‌تر. اما این راه همیشه مناسب و قابل اجرا نیست. مثلاً بیشتر حجم این کامپوننت مربوط به کدهای قسمت mounted یا data و methods و watch هست که جدا کردن این قسمت‌ها و منتقل کردن اونها به فایل‌های مجزا میسر نیست، مگر با روش‌های غیراستاندارد.

پس راه استاندارد و تمیز چیه؟ 🤔 اگه از ورژن ۳ فریم‌ورک Vue استفاده می‌کنیم قابلیتی به اسم Composition API رو داریم 👌

 

Composition API چیه؟ 🤔

این مهمترین ویژگی اضافه شده به Vue 3 هست که با اون می‌تونیم کدهای یک کامپوننت بزرگ رو به بخش‌های کوچیک‌تر تقسیم کنیم تا بتونیم اون‌ها رو به صورت مجزا توسعه بدیم.

در مقابل، ما Options API رو داریم که به روش سنتی‌ای میگن که توی مثال بالا بررسی کردیم.

Composition یعنی چی؟ 🤔

شاید با درک این واژه، بهتر بتونیم این ویژگی فریم‌ورک رو درک کنیم:

کامپوزیشن یک مفهوم کلی توی دنیای برنامه‌نویسی هست و به معنی نحوه قرار گرفتن و ترکیب‌شدن اعضای کوچیک برای ساختن یک ساختار بزرگ هست