مقالات

ارائه رونز


در سال 2019، Svelte 3 جاوا اسکریپت را به یک زبان واکنشی تبدیل کرد. Svelte یک چارچوب وب UI است که از یک کامپایلر برای تبدیل کد جزء اعلامی مانند این استفاده می کند.

… در جاوا اسکریپت کاملاً بهینه شده که سند را زمانی که شرایط مشابه است به روز می کند count تغییر می کند. زیرا کامپایلر می تواند کجا را ببیند count ارجاع شده است، کد تولید شده بسیار کارآمد است و از آنجایی که ما سینتکس مانند را هک می کنیم let و = به جای استفاده از API های دست و پا گیر، می توانید کد کمتری بنویسید.

یک بازخورد معمولی که دریافت می کنیم این است که “کاش می توانستم تمام جاوا اسکریپت خود را اینگونه بنویسم”. زمانی که به به‌روزرسانی جادویی چیزهای درون کامپوننت‌ها عادت کرده‌اید، بازگشت به کد رویه‌ای قدیمی خسته‌کننده، مانند رفتن از رنگ به سیاه و سفید است.

Svelte 5 همه اینها را با رونز، که باز می شود واکنش پذیری همه کاره و ظریف.

ارائه رونز

قبل از اینکه شروع کنیم

نه شیک مانند. بهتر نیست اگر let count به طور پیش فرض واکنشی است؟

خوب، نه. واقعیت این است که با پیچیده‌تر شدن برنامه‌ها، تشخیص اینکه کدام مقادیر واکنش‌پذیر هستند و کدام‌ها نیستند، می‌تواند دشوار شود. و اکتشافی فقط برای let اعلانات در سطح بالای یک جزء، که می تواند باعث سردرگمی شود. وجود کد به یک صورت در داخل نگهداری می شود .svelte فایل ها و دیگری داخل .js می‌تواند بازسازی کد را دشوار کند، برای مثال اگر نیاز دارید چیزی را به فروشگاه تبدیل کنید تا بتوانید از آن در مکان‌های مختلف استفاده کنید.

فراتر از اجزاء

با رون ها، واکنش پذیری فراتر از مرزهای خود شما گسترش می یابد .svelte فایل ها فرض کنید می‌خواهیم منطق شمارنده خود را به گونه‌ای کپسوله کنیم که بتوان آن را دوباره بین اجزاء استفاده کرد. امروز شما از a استفاده می کنید فروشگاه سفارشی در یک .js یا .ts فایل:

شمارنده

همانطور که این اعمال می شود قرارداد مغازه – مقدار بازگشتی دارای a است subscribe روش – می‌توانیم با پیشوند نام فروشگاه به مقدار فروشگاه ارجاع دهیم $:

این کار می کند، اما بسیار عجیب است! ما متوجه شده‌ایم که وقتی شروع به انجام کارهای پیچیده‌تر می‌کنید، API فروشگاه می‌تواند بسیار بدتر شود.

با رونز، همه چیز بسیار ساده تر می شود:

counter.svelte

بیرون .svelte مولفه ها، رون ها را فقط می توان در آنها استفاده کرد .svelte.js و .svelte.ts ماژول ها

توجه داشته باشید که ما از یک ویژگی get در شیء برگشتی استفاده می کنیم، بنابراین counter.count همیشه به مقدار فعلی اشاره دارد، نه مقدار در زمان فراخوانی تابع.

واکنش پذیری در زمان اجرا

امروزه Svelte استفاده می کند واکنش پذیری زمان کامپایل. این بدان معناست که اگر کدی دارید که استفاده می کند $: برچسبی برای راه اندازی مجدد خودکار زمانی که وابستگی ها تغییر می کنند، این وابستگی ها زمانی تعریف می شوند که Svelte جزء شما را کامپایل می کند:

script>
	export let width;
	export let height;

	
	
	$: area = width * height;

	
	
	$: console.log(area);
script>

این خوب کار می کند … تا زمانی که این کار را نمی کند. فرض کنید ما کد بالا را مجدداً تنظیم کردیم:

const multiplyByHeight = (width) => width * height;
$: area = multiplyByHeight(width);

از آنجایی که $: area = ... اعلامیه فقط می تواند “دیدن” width، چه زمانی دوباره محاسبه نمی شود height تغییر می کند. در نتیجه، بازسازی کد دشوار است و درک پیچیدگی‌های زمانی که Svelte تصمیم می‌گیرد به‌روزرسانی چه مقادیری می‌تواند فراتر از سطح معینی از پیچیدگی بسیار پیچیده شود.

Svelte 5 ارائه می دهد $derived و $effect رون هایی که در عوض وابستگی عبارات خود را هنگام ارزیابی مشخص می کنند:

script>
	let { width, height } = $props(); 

	const area = $derived(width * height);

	$effect(() => {
		console.log(area);
	});
script>

همانطور که در $state، $derived و $effect همچنین می تواند در مال شما استفاده شود .js و .ts فایل ها

تقویت سیگنال

ناک اوت در تمام طول بازی دقیق بود.

واکنش پذیری Svelte 5 توسط سیگنال هاکه اساساً همان کاری است که ناک‌آوت در سال 2010 انجام می‌داد. اخیراً، سیگنال‌ها توسط Solid رایج شده‌اند و توسط فریمورک‌های متعدد دیگری به کار گرفته شده‌اند.

با این حال، ما کارها را کمی متفاوت انجام می دهیم. در Svelte 5، هشدارها بیشتر جزییات پیاده‌سازی زیربنایی هستند تا چیزی که مستقیماً با آن تعامل دارید. این بدان معناست که ما محدودیت‌های طراحی API یکسانی نداریم و می‌توانیم عملکرد هر دو را به حداکثر برسانیم و ارگونومی به عنوان مثال، ما از مشکلات باریک شدن نوع که هنگام دسترسی به مقادیر از طریق فراخوانی تابع رخ می دهد، جلوگیری می کنیم، و هنگام کامپایل در حالت رندر سمت سرور، می توانیم به طور کلی از سیگنال ها صرف نظر کنیم، زیرا در سرور آنها چیزی جز سربار نیستند.

قفل هشدارها را باز کنید واکنش ریز دانه، به این معنی که (برای مثال) تغییرات مقدار در یک لیست بزرگ لازم نیست همه آنها را باطل کند دیگری اعضای لیست در نتیجه، Svelte 5 فوق العاده سریع است.

زمان های ساده تر در پیش است

Runes یک ویژگی اضافی است، اما آنها یک دسته کامل از مفاهیم موجود را منسوخ می کنند:

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا