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

تابع remember در کامپوز jetpack compose
در این پست می‌خوانید:

در این مقاله به بررسی و معرفی remember در jetpack compose میپردازیم و تفاوت میان rememberSaveable  را نیز بیان میکنیم .

Jetpack Compose remember

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 زمانی استفاده کنید که وضعیت باید در تغییرات چرخه زندگی مانند چرخش صفحه یا بازگشایی برنامه حفظ شود.
دیدگاه‌ها ۰
ارسال دیدگاه جدید