Svelte چیست؟ آموزش کامل و جامع Svelte

Svelte چیست؟

Svelte یک فریم‌ورک مدرن برای ساخت رابط‌های کاربری است که برخلاف فریم‌ورک‌های دیگر مانند React یا Vue، در زمان کامپایل کد را بهینه می‌کند و نیازی به Virtual DOM ندارد.

Svelte کد شما را در زمان build به JavaScript خالص و بهینه تبدیل می‌کند که باعث عملکرد بهتر و حجم کمتر برنامه می‌شود.
مثال ساده Svelte
<script>
  let name = 'دنیا';
</script>

<h1>سلام {name}!</h1>

<style>
  h1 {
    color: #ff3e00;
  }
</style>

تاریخچه Svelte

Svelte در سال 2016 توسط Rich Harris معرفی شد و نسخه 3 آن در سال 2019 منتشر شد که تغییرات اساسی در سینتکس و عملکرد آن ایجاد کرد.

Svelte به دلیل رویکرد متفاوت خود در کامپایل کردن کامپوننت‌ها به JavaScript خالص، توجه زیادی را در جامعه توسعه‌دهندگان جلب کرده است.

ساختار پایه Svelte

هر فایل Svelte (.svelte) می‌تواند شامل سه بخش اصلی باشد:

ساختار پایه کامپوننت Svelte
<script>
  // منطق و متغیرهای کامپوننت
  let count = 0;
  
  function increment() {
    count += 1;
  }
</script>

<!-- قالب HTML -->
<button on:click={increment}>
  شمارنده: {count}
</button>

<style>
  /* استایل‌های مختص کامپوننت */
  button {
    background: #ff3e00;
    color: white;
    border: none;
    padding: 8px 12px;
    border-radius: 4px;
  }
</style>
استایل‌ها در Svelte به صورت خودکار scoped می‌شوند و فقط روی همان کامپوننت تأثیر می‌گذارند.

کامپوننت‌ها در Svelte

کامپوننت‌ها در Svelte واحدهای مستقل و قابل استفاده مجدد هستند که می‌توانند شامل منطق، قالب و استایل باشند.

مثال کامپوننت Svelte
<!-- Button.svelte -->
<script>
  export let text = 'کلیک کنید';
  export let onClick = () => {};
</script>

<button on:click={onClick}>
  {text}
</button>

<style>
  button {
    /* استایل‌های دکمه */
  }
</style>

<!-- App.svelte -->
<script>
  import Button from './Button.svelte';
  
  function handleClick() {
    alert('دکمه کلیک شد!');
  }
</script>

<Button text="ارسال" onClick={handleClick} />

واکنش‌پذیری در Svelte

یکی از قدرتمندترین ویژگی‌های Svelte، سیستم واکنش‌پذیری ساده و کارآمد آن است. Svelte به طور خودکار تغییرات state را تشخیص می‌دهد و DOM را به‌روزرسانی می‌کند.

مثال واکنش‌پذیری در Svelte
<script>
  let count = 0;
  $: doubled = count * 2;
  $: if (count >= 10) {
    alert('مقدار از 10 بیشتر شد!');
  }

  function increment() {
    count += 1;
  }
</script>

<button on:click={increment}>
  افزایش ({count})
</button>

<p>دو برابر: {doubled}</p>
علامت $: در Svelte نشان‌دهنده یک عبارت واکنش‌پذیر است که با تغییر متغیرهای وابسته، مجدداً اجرا می‌شود.

مدیریت state در Svelte

Svelte روش‌های مختلفی برای مدیریت state ارائه می‌دهد. از متغیرهای ساده گرفته تا stores پیچیده‌تر.

مثال مدیریت state در Svelte
<script>
  import { writable } from 'svelte/store';

  // متغیر ساده
  let count = 0;

  // store قابل نوشتن
  const userStore = writable({
    name: 'کاربر',
    isLoggedIn: false
  });

  // اشتراک در تغییرات store
  userStore.subscribe(value => {
    console.log('تغییرات:', value);
  });

  function login() {
    userStore.update(user => ({
      ...user,
      isLoggedIn: true
    }));
  }
</script>

{#if $userStore.isLoggedIn}
  <p>خوش آمدید، {$userStore.name}!</p>
{:else}
  <button on:click={login}>ورود</button>
{/if}

چرخه حیات کامپوننت‌ها

Svelte دارای توابع چرخه حیات است که به شما امکان می‌دهد در مراحل مختلف ایجاد و نابودی کامپوننت، کدهای خاصی را اجرا کنید.

مثال چرخه حیات در Svelte
<script>
  import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte';

  let data = [];

  onMount(async () => {
    // کامپوننت mount شد
    const response = await fetch('https://api.example.com/data');
    data = await response.json();
  });

  beforeUpdate(() => {
    console.log('قبل از به‌روزرسانی DOM');
  });

  afterUpdate(() => {
    console.log('بعد از به‌روزرسانی DOM');
  });

  onDestroy(() => {
    // تمیزکاری قبل از حذف کامپوننت
    console.log('کامپوننت در حال حذف است');
  });
</script>

{#each data as item}
  <div>{item.name}</div>
{/each}
توابع چرخه حیات در Svelte ساده و کارآمد هستند و برای مدیریت منابع و اجرای کدهای جانبی استفاده می‌شوند.

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

Svelte سیستم مدیریت رویداد قدرتمندی دارد که شامل رویدادهای DOM استاندارد و رویدادهای سفارشی می‌شود.

مثال مدیریت رویداد در Svelte
<script>
  import { createEventDispatcher } from 'svelte';
  const dispatch = createEventDispatcher();

  function handleClick(event) {
    // ارسال رویداد سفارشی
    dispatch('customClick', {
      detail: 'اطلاعات اضافی'
    });
  }

  function handleKeydown(event) {
    if (event.key === 'Enter') {
      console.log('کلید Enter فشرده شد');
    }
  }
</script>

<button 
  on:click={handleClick}
  on:keydown={handleKeydown}>
  کلیک کنید
</button>

<!-- در کامپوننت والد -->
<ChildComponent 
  on:customClick={(event) => {
    console.log(event.detail);
  }} 
/>

Stores در Svelte

Stores در Svelte راهی برای مدیریت state در سطح برنامه و به اشتراک‌گذاری داده بین کامپوننت‌ها هستند.

مثال استفاده از Stores
<script>
  import { writable, readable, derived } from 'svelte/store';

  // store قابل نوشتن
  const count = writable(0);

  // store فقط خواندنی
  const time = readable(new Date(), set => {
    const interval = setInterval(() => {
      set(new Date());
    }, 1000);

    return () => clearInterval(interval);
  });

  // store مشتق شده
  const elapsed = derived(time, $time => {
    return Math.round(($time - new Date(0)) / 1000);
  });
</script>

<button on:click={() => count.update(n => n + 1)}>
  شمارنده: {$count}
</button>

<p>زمان فعلی: {$time.toLocaleTimeString()}</p>
<p>ثانیه‌های سپری شده: {$elapsed}</p>
استفاده از علامت $ قبل از نام store، به طور خودکار اشتراک و لغو اشتراک را مدیریت می‌کند.

انیمیشن‌ها در Svelte

Svelte دارای سیستم انیمیشن داخلی قدرتمندی است که به شما امکان می‌دهد انیمیشن‌های روان و کارآمد ایجاد کنید.

مثال انیمیشن در Svelte
<script>
  import { fade, fly, slide } from 'svelte/transition';
  import { spring } from 'svelte/motion';

  let visible = true;
  
  const coords = spring({ x: 0, y: 0 }, {
    stiffness: 0.2,
    damping: 0.4
  });

  function handleMousemove(event) {
    coords.set({ x: event.clientX, y: event.clientY });
  }
</script>

<div on:mousemove={handleMousemove}>
  {#if visible}
    <div transition:fade>
      فید این/اوت
    </div>
  {/if}

  <div
    style="transform: translate({$coords.x}px, {$coords.y}px)">
    👆
  </div>
</div>

بهترین شیوه‌های کدنویسی Svelte

برای نوشتن کد بهتر و کارآمدتر در Svelte، رعایت این اصول توصیه می‌شود:

۱. سازماندهی کامپوننت‌ها

کامپوننت‌ها را به بخش‌های کوچک‌تر و قابل استفاده مجدد تقسیم کنید.

۲. مدیریت state

از stores برای مدیریت state‌های پیچیده و به اشتراک‌گذاری داده بین کامپوننت‌ها استفاده کنید.

مثال ساختار پروژه
src/
├── components/
│   ├── common/
│   │   ├── Button.svelte
│   │   └── Input.svelte
│   └── features/
│       ├── UserProfile.svelte
│       └── Settings.svelte
├── stores/
│   ├── auth.js
│   └── theme.js
├── utils/
│   └── helpers.js
└── App.svelte
از ایجاد کامپوننت‌های بزرگ و پیچیده خودداری کنید. کامپوننت‌های کوچک‌تر راحت‌تر مدیریت و نگهداری می‌شوند.

ابزارهای مفید برای کار با Svelte

۱. محیط‌های توسعه

– VS Code با افزونه Svelte for VS Code
– WebStorm با پشتیبانی داخلی از Svelte
– Svelte Language Tools

۲. ابزارهای ساخت

– Vite
– Rollup
– SvelteKit (فریم‌ورک کامل برای ساخت برنامه‌ها)

راه‌اندازی پروژه جدید با SvelteKit
# ایجاد پروژه جدید
npm create svelte@latest my-app

# نصب وابستگی‌ها
cd my-app
npm install

# اجرای سرور توسعه
npm run dev

۳. کتابخانه‌های مفید

– Svelte Material UI
– Carbon Components Svelte
– Svelte Query
– Svelte Forms Lib

استفاده از این ابزارها می‌تواند بهره‌وری شما را در توسعه با Svelte افزایش دهد.

بهینه‌سازی SEO در Svelte

برای بهینه‌سازی SEO در برنامه‌های Svelte، می‌توانید از SvelteKit استفاده کنید که SSR (Server-Side Rendering) را ارائه می‌دهد.

مثال متادیتا در SvelteKit
<script>
  import { MetaTags } from 'svelte-meta-tags';
</script>

<MetaTags
  title="عنوان صفحه | نام سایت"
  description="توضیحات صفحه برای موتورهای جستجو"
  openGraph={{
    title: 'عنوان Open Graph',
    description: 'توضیحات Open Graph',
    images: [
      {
        url: 'https://example.com/og-image.jpg',
        width: 800,
        height: 600,
        alt: 'توضیح تصویر'
      }
    ]
  }}
/>
برای بهینه‌سازی SEO، از SSR استفاده کنید و مطمئن شوید که متادیتای مناسب برای هر صفحه تنظیم شده است.

استقرار برنامه‌های Svelte

برنامه‌های Svelte را می‌توان در پلتفرم‌های مختلفی مستقر کرد:

دستورات ساخت و استقرار
# ساخت برنامه
npm run build

# پیش‌نمایش نسخه ساخته شده
npm run preview

# استقرار در Vercel
vercel deploy

پلتفرم‌های استقرار

– Vercel
– Netlify
– Cloudflare Pages
– Digital Ocean
– سرورهای شخصی

SvelteKit با اکثر پلتفرم‌های استقرار مدرن سازگار است و می‌تواند به صورت خودکار پیکربندی شود.

تست‌نویسی در Svelte

تست‌نویسی یک بخش مهم از توسعه برنامه‌های Svelte است. می‌توانید از ابزارهای مختلفی برای تست استفاده کنید:

مثال تست در Svelte
import { render, fireEvent } from '@testing-library/svelte';
import Counter from './Counter.svelte';

test('باید مقدار شمارنده را افزایش دهد', async () => {
  const { getByText } = render(Counter);
  const button = getByText('افزایش');
  
  await fireEvent.click(button);
  
  expect(getByText('1')).toBeInTheDocument();
});

ابزارهای تست

– Jest
– Testing Library
– Vitest
– Playwright برای تست‌های E2E

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

کلمات کلیدی:

Svelte فریم‌ورک جاوااسکریپت توسعه وب فرانت‌اند SvelteKit کامپوننت‌محور واکنش‌پذیری جاوااسکریپت مدرن

جمع‌بندی:

در این مقاله به طور جامع با Svelte و ویژگی‌های منحصر به فرد آن آشنا شدیم. آموختیم که چگونه Svelte با رویکرد متفاوت خود در کامپایل کردن کد، عملکرد بهتری نسبت به فریم‌ورک‌های دیگر ارائه می‌دهد. با ساختار پایه کامپوننت‌ها، نحوه مدیریت state، واکنش‌پذیری و دیگر مفاهیم کلیدی Svelte آشنا شدیم. برای یادگیری عمیق‌تر، پیشنهاد می‌کنیم آموزش‌های عملی را دنبال کرده و پروژه‌های واقعی با Svelte را تجربه کنید.

Leave a Reply

Your email address will not be published. Required fields are marked *