تابع remember در کامپوز jetpack compose


در این مقاله به بررسی و معرفی remember در jetpack compose میپردازیم و تفاوت میان rememberSaveable را نیز بیان میکنیم .
Remember : ذخیره وضعیت در بازترکیب
در Jetpack Compose، تابع remember ابزاری برای حفظ وضعیت (state) در هنگام بازترکیب (recomposition) یک تابع Composable است. این تابع به شما امکان میدهد که وضعیت متغیر (mutable state) را در داخل یک Composable مدیریت کنید، بدون اینکه نیاز باشد خودتان بهطور دستی وضعیت را مدیریت کنید.
البته remember. یه مفهوم مستقل نیست ، بلکه در معرفی state بیان شد ، برای مطالعه منابع خارجی به اینجا مراجعه کنید .
همچنین برای مطالعه منابع داخلی میتوانید به این اینجا سر بزنید .
remember مشابه mutableStateOf عمل میکند، زیرا هر دوی آنها وظیفه نگهداری وضعیت State متغیر را دارند. اما تفاوت اصلی اینجاست که remember تضمین میکند وضعیت در طول بازترکیبها حفظ شود. زمانی که تابع Composable دوباره بازترکیب میشود، remember همان وضعیت ذخیرهشده قبلی را بازمیگرداند و وضعیت به مقدار اولیهاش بازنشانی نمیشود.
نکات کلیدی:
- remember برای نگهداشتن وضعیت در طول چرخههای بازترکیب Recompose استفاده میشود.
- وضعیت ذخیرهشده توسط remember فقط در طول عمر همان Composable معتبر است.
- استفاده از remember باعث میشود که هنگام تغییرات UI، وضعیت از دست نرود و پایدار بماند.
مثال :
import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.Preview @Composable fun MyComposable() { // Remembering the state val count = remember { mutableStateOf(0) } // Increment the count when a button is clicked Button(onClick = { count.value++ }) { Text(“Click me! Count: ${count.value}”) } } @Preview @Composable fun MyComposablePreview() { MyComposable() }
در این مثال، تابع remember برای حفظ وضعیت متغیر count در طول بازترکیبها (recompositions) استفاده شده است. زمانی که دکمه کلیک میشود، مقدار count بهروزرسانی شده و تابع Composable با مقدار جدید بازترکیب میشود. اگر از remember استفاده نمیشد، متغیر count در هر بازترکیب دوباره به مقدار اولیه (0) تنظیم میشد و کلیک دکمه هیچ تأثیری نداشت.
مزیت استفاده از remember:
- remember به مدیریت بهینه وضعیت کمک میکند.
- وضعیت متغیر حتی در صورت بازترکیب تابع Composable به دلیل تغییرات خارجی یا تعاملات کاربر، حفظ میشود.
توضیح ساده:
- بدون remember: مقدار count در هر بازترکیب به ۰ بازنشانی میشود.
- با remember: مقدار count در طول بازترکیبها ثابت و پایدار میماند.
نتیجه:
استفاده از remember برای مدیریت وضعیت در Composableها بسیار کاربردی و ضروری است، زیرا از بازنشانی وضعیت جلوگیری کرده و رفتار مورد انتظار UI را تضمین میکند.
rememberSaveable :حفظ در طول چرخه زندگی Lifecycle
تابع rememberSaveable مشابه remember عمل میکند، اما با یک تفاوت مهم: مقدار ذخیرهشده توسط rememberSaveable حتی در تغییرات چرخه زندگی (Lifecycle) مانند چرخش صفحه یا توقف و بازگشایی برنامه نیز حفظ میشود. این قابلیت به دلیل استفاده از SavedStateHandle یا Bundle برای ذخیره دادهها فراهم شده است.
ویژگیهای کلیدی rememberSaveable:
- مقدار ذخیرهشده در تغییرات چرخه زندگی (Lifecycle) مانند چرخش صفحه یا بازگشت به برنامه، حفظ میشود.
- مناسب برای وضعیتهایی که باید پایدار بمانند، حتی در تغییرات محیطی.
مثال ساده:
@Composable fun Counter() { var count by rememberSaveable { mutableStateOf(0) } Button(onClick = { count++ }) { Text("Count: $count") } }
در این مثال:
- مقدار count نهتنها در بازترکیبها، بلکه در تغییرات چرخه زندگی نیز حفظ میشود.
- اگر کاربر صفحه را بچرخاند یا برنامه بسته و باز شود، مقدار count از دست نمیرود.
تفاوتهای کلیدی:
ویژگی | remember | rememberSaveable |
حفظ وضعیت در بازترکیبها | بله | بله |
حفظ وضعیت در تغییر چرخه زندگی | خیر | بله |
کاربرد | برای وضعیتهایی که فقط در چرخه ترکیب معتبر هستند | برای وضعیتهایی که باید در تغییرات چرخه زندگی حفظ شوند |
جمعبندی و بهترین موارد استفاده:
- از remember زمانی استفاده کنید که وضعیت فقط در چرخه ترکیب لازم است و نیازی به حفظ آن در تغییرات چرخه زندگی ندارید.
- از rememberSaveable زمانی استفاده کنید که وضعیت باید در تغییرات چرخه زندگی مانند چرخش صفحه یا بازگشایی برنامه حفظ شود.