Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
322 of 502 menu
◀ ▶

Функция LaunchedEffect

Функция LaunchedEffect входит в composable и запускает suspend-код в scope composable. Когда ключи в параметрах меняются, старая корутина отменяется и стартует новая. Когда composable уходит с экрана, корутина тоже отменяется. Так обновляют состояние после задержки или подписываются на поток один раз.

Синтаксис

LaunchedEffect(key1) { delay(1000) }

Параметры

Параметр Описание
keys Ключи эффекта. При смене любого ключа корутина перезапускается.
block Suspend-лямда с телом эффекта.

Пример

Давайте сменим текст через секунду после старта:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import kotlinx.coroutines.delay class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var text by remember { mutableStateOf("abcde") } LaunchedEffect(Unit) { delay(1000) text = "12345" } Text(text = text) } } }

На экране сначала будет "abcde", через секунду текст сменится на "12345".

Пример

Давайте перезапустим эффект при смене ключа:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import kotlinx.coroutines.delay class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var key by remember { mutableIntStateOf(0) } var text by remember { mutableStateOf("abcde") } LaunchedEffect(key) { text = "abcde" delay(500) text = "12345" } Button(onClick = { key++ }) { Text(text = "abcde") } Text(text = text) } } }

На экране каждое нажатие снова покажет "abcde", затем через паузу "12345".

Смотрите также

  • функция DisposableEffect,
    которая вызывает onDispose при уходе
  • функция SideEffect,
    которая срабатывает после каждой удачной перерисовки
  • функция repeatOnLifecycle,
    которая привязывает корутину к Lifecycle
  • функция produceState,
    которая пишет в State из корутины
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить