Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
LaunchedEffect в Jetpack Compose
Что это такое?
LaunchedEffect — это composable функция из Jetpack Compose, которая позволяет запускать suspend-функции (корутины) в контексте композиции. Она нужна для выполнения побочных эффектов (side effects), которые должны происходить в момент композиции элемента.
Когда используется?
LaunchedEffect нужен для:
- Загрузки данных при отображении экрана
- Инициализации ресурсов (подписки на события, подключение к API)
- Отправки аналитики и логирования
- Синхронизации состояния с внешними источниками
- Запуска анимаций в определённый момент
Синтаксис
LaunchedEffect(key1, key2) {
// Suspend-функция, выполняется в корутине
val data = fetchData()
setState(data)
}
Ключевые параметры:
- Keys — значения, при изменении которых эффект запускается заново
- Если keys не изменились → эффект не выполняется повторно
- Если keys = listOf() → выполнится один раз при композиции
Пример: загрузка данных
@Composable
fun UserScreen(userId: Int) {
var user by remember { mutableStateOf<User?>(null) }
var isLoading by remember { mutableStateOf(true) }
var error by remember { mutableStateOf<String?>(null) }
LaunchedEffect(userId) {
isLoading = true
try {
user = fetchUserById(userId)
} catch (e: Exception) {
error = e.message
} finally {
isLoading = false
}
}
when {
isLoading -> LoadingScreen()
error != null -> ErrorScreen(error)
user != null -> UserDetails(user)
}
}
LaunchedEffect vs остальное
LaunchedEffect — для корутин в композиции remember — для сохранения состояния DisposableEffect — для очистки ресурсов produceState — для преобразования асинхронного источника в состояние
Важные правила
- LaunchedEffect выполняется после рендера UI
- При перекомпозиции с новыми keys — предыдущий эффект отменяется (cancel())
- Всегда нужна обработка ошибок
- Используй эффекты для побочных действий, не для трансформации данных