tgoop.com/mobileproglib/6290
Create:
Last Update:
Last Update:
В Jetpack Compose не рекомендуется напрямую вызывать не-компонуемые функции внутри composable-функций.
Вместо этого, чтобы безопасно выполнять операции вроде запуска корутин, вызова побочных эффектов или обработки логики, зависящей от жизненного цикла, используются обработчики эффектов (effect handlers).
Эти обработчики позволяют безопасно взаимодействовать с внешним миром (сеть, база данных, логи и т. д.) в контролируемом виде.
Ниже приведены самые распространённые обработчики эффектов в Compose — просто и с примерами.
🔹 SideEffect
Выполняет логику после каждого успешного пересоздания (recomposition).
SideEffect {
Log.d("TAG", "Recomposition completed")
}
Подходит для логирования, аналитики или любых операций, которые должны выполняться после отрисовки интерфейса.
🔹
LaunchedEffect
Запускает корутину, когда изменяется указанный ключ. Если происходит пересоздание и ключ меняется — предыдущая корутина отменяется, и запускается новая.
LaunchedEffect(key1 = someState) {
fetchData()
}
Идеально подходит для вызова API или выполнения логики, зависящей от изменяющегося состояния.
🔹
rememberCoroutineScope
Предоставляет область действия корутины, которая сохраняется между пересозданиями. Лучше всего использовать, когда нужно запускать корутины в ответ на действия пользователя (например, нажатие кнопки).
val coroutineScope = rememberCoroutineScope()
Button(onClick = {
coroutineScope.launch {
doSomething()
}
}) {
Text("Click me")
}
Для событий, инициируемых пользователем, которые не зависят напрямую от состояния или жизненного цикла.
🔹
DisposableEffect
Выполняет код при входе в композицию и очищает ресурсы при выходе из неё.
DisposableEffect(key1 = someKey) {
startListening()
onDispose {
stopListening()
}
}
Добавление или удаление слушателей, наблюдателей, освобождение внешних ресурсов и другая логика очистки.
#буст #JuniorKit #Android