← Назад к вопросам

Для чего нужен LaunchedEffect?

2.0 Middle🔥 151 комментариев
#UI и вёрстка

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

LaunchedEffect в Jetpack Compose

Что это такое?

LaunchedEffect — это composable функция из Jetpack Compose, которая позволяет запускать suspend-функции (корутины) в контексте композиции. Она нужна для выполнения побочных эффектов (side effects), которые должны происходить в момент композиции элемента.

Когда используется?

LaunchedEffect нужен для:

  1. Загрузки данных при отображении экрана
  2. Инициализации ресурсов (подписки на события, подключение к API)
  3. Отправки аналитики и логирования
  4. Синхронизации состояния с внешними источниками
  5. Запуска анимаций в определённый момент

Синтаксис

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())
  • Всегда нужна обработка ошибок
  • Используй эффекты для побочных действий, не для трансформации данных
Для чего нужен LaunchedEffect? | PrepBro