درJetpack Compose، کامپوننتهای Stateful و Stateless به دو دسته کلی تقسیم میشوند:
یک کامپوننت Stateless هیچ وضعیت داخلی (State) را مدیریت نمیکند. خروجی این کامپوننت فقط به ورودیهایی که دریافت میکند وابسته است. این نوع کامپوننتها به عنوان "کامپوننتهای گنگ" (Dumb Components) شناخته میشوند، زیرا منطق خاصی ندارند و فقط داده هایی که دریافت میکنند را نمایش میدهند.
به بیان دیگر یک کامپوننت Stateless مانند یک کتاب است. هر بار که آن را باز میکنید، همان محتوا را نمایش میدهد، مگر اینکه به صورت دستی چیزی را در داخل آن تغییر دهید.
در Jetpack Compose، یک کامپوننت Stateless هیچ تغییری را به خاطر نمیسپارد. هر بار که فراخوانی میشود، فقط آنچه را که به آن داده شده است، نمایش میدهد.
مثال ۱:
بیایید یک کامپوننت ساده برای نمایش پیام خوشآمدگویی را بررسی کنیم:
در این مثال، تابع Greeting یک کامپوننت Stateless است، زیرا:
مثلاً اگر مقدار name برابر "Mohammad" باشد، این کامپوننت همیشه "Hello , Mohammad" را نمایش خواهد داد، مگر اینکه مقدار جدیدی برای name ارسال شود.
مثال ۲:
✅ مزایا:
❌ معایب:
یک کامپوننت Stateful دارای وضعیت داخلی (State) است و خروجی آن علاوه بر ورودیها، به وضعیت داخلی خودش نیز بستگی دارد. این نوع کامپوننتها به عنوان "کامپوننتهای هوشمند" (Smart Components) شناخته میشوند، زیرا میتوانند به ورودیهای کاربر واکنش نشان دهند، محاسبات انجام دهند و وضعیت خود را تغییر دهند. این تغییر وضعیت باعث بازسازی (Recompose) مجدد کامپوننت خواهد شد.
به بیان دیگر یک کامپوننت Stateful مانند یک کنترل تلویزیون است. به خاطر میآورد که آخرین بار کدام دکمه را فشار دادهاید و صفحه نمایش تلویزیون را بر اساس آن تغییر میدهد.
در Jetpack Compose، یک کامپوننت Stateful وضعیت داخلی خود را نگه میدارد و به تغییرات پاسخ میدهد.
مثال ۱:
بیایید یک دکمه بسازیم که تعداد کلیکهای کاربر را شمارش کند:
در این مثال، ClickCounter یک کامپوننت Stateful است، زیرا:
مثال ۲:
بررسی Composable دارای وضعیت (Stateful) :
در این مثال، تابع Greeting یک کامپوننت Stateful است زیرا:
در اینجا، متغیر isExpanded مشخص میکند که متن باید کامل نمایش داده شود یا خیر و مقدار آن هنگام کلیک روی IconButton تغییر میکند.
✅ مزایا:
❌ معایب:
✅ کامپوننت های Stateless مناسب هستند برای:
✅ کامپوننت های Stateful مناسب هستند برای:
درک تفاوت بین Stateful و Stateless برای ساخت رابط های کاربری بهینه و قابل نگهداری در Jetpack Compose ضروری است.
🔹 کامپوننت های Stateless ساده، قابل استفاده مجدد و سریع هستند، و برای نمایش دادههای ثابت ایدهآلاند.
🔹 کامپوننت های Stateful برای مدیریت تعاملات کاربر و دادههای پویا ضروریاند، اما پیچیدگی و هزینه عملکردی بیشتری دارند.
📌 بهترین روش: در پروژههای واقعی، اغلب از ترکیب Stateful و Stateless استفاده میشود تا انعطافپذیری ، تستپذیری و قابلیت استفاده مجدد را افزایش دهیم.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید