Alpine.js یک چارچوب JavaScript جلوی آن مانند یک کوله پشتی سبک ، با API مینیمالیستی و ویژگی های متفکرانه است. بیایید آن را امتحان کنیم.
من اخیراً از طریق Big Sur کوله پشتی کردم و بعد از چند روز ، اجتناب ناپذیر اتفاق افتاد: من به هر آنچه که حمل کردم نگاه کردم و خواستار آن شدم که حضور آن را در کوله پشتی من توجیه کند. انجام گزینه های فنی در طی فرآیند توسعه نرم افزار مشابه است. هر دارایی موجود در سیستم پیچیدگی را اضافه می کند ، بنابراین همه چیز بهتر است وزن خود را بکشید.
آلپین مکانی را برای خود به عنوان انتخاب مینیمالیستی در میان چارچوب های واکنش /rective
همانطور که در اسناد آلپ شرح داده شده است ، آلپ مجموعه ای از ۱۵ ویژگی ، شش خاصیت و دو روش است. این یک API بسیار کوچک است. این واکنش پذیری را در یک بسته ساده ارائه می دهد ، سپس چند مورد در بالا مانند رویداد و یک فروشگاه ارائه می دهد. صفحه وب ساده زیر را در نظر بگیرید: علاوه بر بسته بندی آلپین از طریق CDN ، تنها چیزهای مرتبط با آلپ در اینجا دو دستورالعمل هستند: اگر این موضوع را در صفحه HTML در سیستم خود قرار داده و آن را در مرورگر مشاهده کنید ، این پیام را مشاهده خواهید کرد: خروجی “متن به معنای کلی”. این بسیار چشمگیر نیست ، اما دو واقعیت جالب در مورد آلپ را نشان می دهد. ابتدا ، برای واکنش پذیری درگیری ، باید نشانه گذاری را در یک دستورالعمل دوم ، می توانید هر نوع javascript را به آلپین از ویژگی های HTML برای تعریف عملکرد آن استفاده می کند ، که آن را از بعضی جهات شبیه به htmx اگرچه آنها کارهای مختلفی انجام می دهند ، هر دو فناوری از برنامه های پسوند HTML با اکنون این صفحه آغاز اعلامیه استقلال را صادر می کند. می توانید ببینید که اکنون ما از واکنش پذیری برای رفع خطایی در سند استفاده خواهیم کرد: همانطور که اکنون مشهود است ، دستورالعمل UI به طور خودکار تغییر داده ها را منعکس می کند. خصوصیات داده در آلپین اشیاء جاوا اسکریپت کامل است. با دانستن این موضوع ، در اینجا روش دیگری برای رسیدگی به نیاز فوق وجود دارد: در این مثال ، می بینید که شی گاهی اوقات کدی را مشاهده می کنید که از دستورالعمل اکنون اجازه دهید چرخ دنده ها را تغییر دهیم و در مورد الزامی که می خواهید یک لیست با فرمت JSON از روسای جمهور آمریکایی را از یک API خارجی بارگیری کنید ، فکر کنیم. اولین کاری که ما انجام خواهیم داد این است که هنگام بارگیری صفحه ، آن را بارگیری کنیم. برای این کار ، ما از دستورالعمل اجازه دهید این کد را باز کنیم. دستورالعمل کد پس از به دست آوردن لیست روسای جمهور از نقطه پایانی ، ما آن را به متغیر برای تکرار: Alpine داده ها را از در این مرحله ، برنامه داده ها را از نقطه پایانی از راه دور بیرون می کشد و آن را به حالت ذخیره می کند. با این حال ، این در حال خروج از چیزی مانند مرد ، که واقعاً تمیز ، کد و الگوی خود توضیحی است! کد حاوی یک لیست غیر سفارش معمولی ، و سپس یک عنصر الگوی html است که حاوی بقیه نشانه ها از متغیر برنامه اکنون چیزی شبیه به تصویر زیر به نظر می رسد ، لیستی از روسای جمهور ایالات متحده را نشان می دهد. اکنون بیایید بگوییم که ما می خواهیم با کلیک بر روی نام رئیس جمهور ، توانایی تغییر داده ها را برای رئیس جمهور اضافه کنیم. ما نشانه گذاری را تغییر می دهیم تا به این شکل نگاه کنیم: ما از دستورالعمل برای تغییر مقدار Alpine شامل انتقال های داخلی است که می توانید برای ویژگی نمایش/پنهان استفاده کنید. در اینجا نحوه اضافه کردن انیمیشن پیش فرض آورده شده است: تمام آنچه تغییر کرد عنصری بود که دارای دستورالعمل اکنون ما یک قابلیت فیلتر ساده را اضافه خواهیم کرد. این کار نیاز به افزودن ورودی دارد که به داده های خود متصل می شوید ، سپس بر اساس آن مقدار ، مجموعه داده های برگشتی را فیلتر می کنید. شما می توانید تغییرات را در اینجا مشاهده کنید: توجه کنید که شیء ما الگوی ممکن است در مورد ارتباطات بین مؤلفه تعجب کنید. alpine.js از سیم کشی صریح بین مؤلفه ها (به عنوان مثال بدون خاصیت والدین به کودک) استفاده می کند. در عوض ، از محیط مرورگر (یعنی پنجره) به عنوان استفاده می کند. این مطابق با فلسفه آلپین برای افزودن عملکرد کافی به آنچه در حال حاضر در آنجا وجود دارد ، و به خوبی کار می کند. به مراجعه کنید به مخزن github برای مشاهده تمام کد برای نمونه های این مقاله. مانند نامگذاری آن ، Alpine کوله پشتی با دنده اصلی است تا شما را از طریق کوه ها بدست آورد. این حداقل ، اما کافی است. این شامل برخی از ویژگی های سطح بالاتر ، مانند یک فروشگاه مرکزی و یک سیستم رویداد و همچنین معماری افزونه و اکوسیستم است. در کل ، آلپ برای استفاده ارگونومیک است و اگر با سایر چارچوب های واکنشی کار کرده اید ، آشنا خواهد بود. به همین دلایل ، یادگیری سریع و آسان است. سادگی اعلام یک مؤلفه و داده های آن در یک دستورالعمل به مقایسه چارچوب JavaScript برای اطلاعات بیشتر در مورد Alpine و سایر چارچوب های جلویی. API مینیمالیستی آلپ
<html>
<head>
<script src="https://unpkg.com/alpinejs@3.14.8/dist/cdn.min.js" defer></script>
</head>
<body>
<div x-data="">
<span x-text="'Text literal'"></span>
</div>
</body>
</html>
X-Data
و x-text
. x-data
محصور کنید. اگر این بخشنامه را حذف کنید ، x-text
اثر نخواهد داشت. بنابراین ، دستورالعمل X-Data
یک مؤلفه آلپ را ایجاد می کند. در این حالت ، دستورالعمل خالی است ، اما در استفاده واقعی تقریباً همیشه داده ها را در آنجا دارید. از این گذشته ، شما در حال نوشتن مؤلفه هایی هستید که هدف آنها واکنشی به آن داده ها است. x-text /کد> اضافه کنید. این در مورد All دستورالعمل های آلپ صادق است. ویژگی
X-Text
پیوندی بین HTML (نمای) و JavaScript (رفتار) به شما می دهد. alpine و htmx
x-prefix
استفاده می کنند تا قدرت های بوت استرپ را بر روی HTML قدیمی قدیمی انجام دهند.
<div x-data="{ message: 'When in the course of human events...' }">
<span x-text="message"></span>
</div>
x-data
یک شیء قدیمی JavaScript قدیمی را با یک قسمت واحد ، “پیام” تعریف کرده است که حاوی مقدمه است ، و اینکه x-text
به این قسمت شیء اشاره دارد. واکنش پذیری در آلپ
<div x-data="{ noun: 'men' }">
<button x-on:click="noun = 'people'">Fix It</button>
<span x-text="`all ${noun} are created equal`"></span>
</div>
X-Text
به متغیر اسم در معرض دستورالعمل X
اشاره دارد. قطعه جدید در اینجا دکمه ای است که دارای دستورالعمل X-on است: روی
کلیک کنید. کنترل کننده این رویداد کلیک جایگزین اسم پیش فرض قدیمی (“مردان”) با یک جنسیت بی طرف ، “مردم” است. واکنش پذیری سپس به روزرسانی مرجع را در x-text
انجام می دهد. توابع در داده ها
<div x-data="{
noun: 'men',
fixIt: function(){
this.noun = 'people';
}
}">
<button x-on:click="fixIt()">Fix It</button>
<span x-text="`all ${noun} are created equal`"></span>
</div>
داده
اکنون میزبان یک روش fixit
است که توسط کنترل کننده کلیک خوانده می شود. ما می توانیم هر ساختار شیء را به بهترین وجه با رفتاری که می خواهیم در HTML مشاهده کنیم ، انجام دهیم. اسکریپت در مقابل X-Data
X-Data
به یک تابع تعریف شده در یک اسکریپت
می پردازد. این یک موضوع اولویت شخصی است ، زیرا دقیقاً به همان روشی که یک خط داخلی x-data
عمل می کند ، عمل می کند:
<div x-data="myDataFunction()">...</div>
...
<script>
function myDataFunction() {
return {
foo: "bar"
}
}
</script>
واکشی داده های از راه دور
x-init
استفاده خواهیم کرد:
<div x-data="{
presidents: []
}"
x-init="(
async () => {
const response = await fetch('https://raw.githubusercontent.com/hitch17/sample-data/master/presidents.json');
presidents = await response.json();
}
)">
<span x-text="presidents"></span>
</div>
X-Data
باید واضح باشد. این یک قسمت روسای جمهور
با یک آرایه خالی دارد. x-text
در عنصر span
محتویات این قسمت را خروجی می کند. x-init
کمی بیشتر درگیر است. اول از همه ، توجه کنید که در یک عملکرد خود اجرایی پیچیده شده است. این امر به این دلیل است که Alpine انتظار یک عملکرد را دارد (نه یک تعریف عملکرد). اگر قرار بود از فرم پاسخ به تماس غیر ASYNC Fetch
استفاده کنید ، نیازی به بسته بندی عملکرد مانند این نیست (زیرا در این مورد به عملکرد async-scoped احتیاج ندارید). روسای جمهور
می چسبانیم ، که آلپین به عنوان بخشی از شیء x-data
در معرض ما قرار داده است. X-Data
در دسترس سایر توابع دستورالعمل (مانند x-init
) در همان زمینه قرار می دهد. تکرار با آلپین
[object] ، [object] ....
است. این چیزی نیست که ما می خواهیم. برای رفع آن ، ما ابتدا باید نگاهی به تکرار داده ها بیندازیم:
<div x-data=...>
<ul>
<template x-for="pres in presidents">
<li><div x-text="pres.president"></div>
From: <span x-text="pres.took_office"></span> Until: <span x-text="pres.left_office"></span></li>
</template>
</ul>
</div>
x-for //code> است. این دستورالعمل دقیقاً مانند سایر چارچوبهای واکنشی عمل می کند. این امکان را برای تعیین یک مجموعه ، روسای جمهور و یک شناسه فراهم می کند ، که به نشانه محصور شده ارائه می شود که نشان دهنده هر نمونه از آن مجموعه است (در این حالت ،
pres
). pres
برای خروجی داده ها از اشیاء از طریق x-text
استفاده می کنند. (این استفاده از تکرار یکی از رایج ترین الگوهای موجود در تمام نرم افزارها است.)
نمایش/پنهان کردن و onClick
<template x-for="pres in presidents">
<li>
<div x-text="pres.president" x-on:click="pres.show = ! pres.show"></div>
<div x-show="pres.show">
From: <span x-text="pres.took_office"></span> Until: <span x-text="pres.left_office"></span>
</div>
</li>
</template>
X-Show
در یک div
حاوی جزئیات ریاست جمهوری استفاده می کنیم. حقیقت بودن مقدار x-show
تعیین می کند که آیا محتوا قابل مشاهده است یا خیر. در مورد ما ، این توسط قسمت pres.show
تعیین می شود. (توجه داشته باشید که در یک برنامه واقعی ، شما ممکن است بخواهید از داده های تجاری واقعی برای میزبانی متغیر نمایش/پنهان استفاده کنید تا داده ها و رفتار را منزوی تر نگه دارید.) pres.show
ما یک x-on را اضافه می کنیم: روی کنترل کننده
روی هدر کلیک کنید. این کنترل کننده به سادگی مقدار واقعی/غلط pres.show: pres.show =! Pres.show
. اضافه کردن انیمیشن انتقال
<div x-show="pres.show" x-transition>
From: <span x-text="pres.took_office"></span> Until: <span x-text="pres.left_office"></span></li>
</div>
X-Show
بود ، که اکنون دارای یک دستورالعمل X-Transition
است. به طور پیش فرض ، Alpine انتقال معقول را اعمال می کند. در این حالت از اثر اسلاید و محو استفاده می شود. شما می توانید انتقال را بطور گسترده سفارشی کنید ، از جمله با استفاده از کلاسهای CSS خود در مراحل مختلف انیمیشن. برای اطلاعات بیشتر به مراجعه کنید. اتصال به ورودی ها
<div x-data="{
filter: '',
presidents: [],
getPresidents: function(){
return this.presidents.filter(pres => pres.president.includes(this.filter) )
}
}"
...
<input x-model="filter" />
...
<ul>
<template x-for="pres in getPresidents">
X-Data
اکنون یک فیلد “فیلتر” روی آن دارد. این دو طرفه از طریق دستورالعمل X-Model
که به “ فیلتر
” اشاره می کند ، به عنصر ورودی محدود می شود. x-for
را برای مرجع یک روش جدید getPresidents ()
تغییر داده ایم ، که در شی x-data
اجرا شده است. این روش از نحو استاندارد JavaScript برای فیلتر کردن روسای جمهور بر اساس اینکه آیا متن را در قسمت فیلتر قرار می دهند ، استفاده می کند. دستورالعمل اعزام $ Alpine
نتیجه گیری
X
به سادگی نبوغ است. دفعه بعد که من به کد سرمایه گذاری می روم ، آلپین گزینه وسوسه انگیز خواهد بود.
پست های مرتبط
معرفی به alpine.js: یک چارچوب جاوا اسکریپت برای مینیمالیست ها
معرفی به alpine.js: یک چارچوب جاوا اسکریپت برای مینیمالیست ها
معرفی به alpine.js: یک چارچوب جاوا اسکریپت برای مینیمالیست ها