Tech Sheets

Composableが表示されたタイミングでコルーチンを起動する(LaunchedEffect)

最終更新日:2022-05-09

Composableは関数なので、次のように表示のタイミングで処理(副作用)を書きたくなります。

@Composable
fun TopScreen(id: String) {
  // サーバーからデータ取得するでー
  val user = getUser(id)
  
  Text(user.name)
}

しかしComposable関数は状態の変化などで何度も呼ばれます。またコルーチンスコープ外なのでsuspend関数も呼べません。

Composableが表示されたタイミングで処理を実行したい場合は、 LaunchedEffect を使います。

@Composable
fun LaunchedEffectScreen(
    back: () -> Unit,
) {
    var counter by remember { mutableStateOf(0) }

    LaunchedEffect(Unit) {
        while (true) {
            delay(1000)
            ++counter
        }
    }

    // HasBackScaffoldは自作のComposable
    HasBackScaffold(
        title = stringResource(id = R.string.effect_launched_effect),
        back = back,
    ) { paddingValues ->
        Text(
            "Count=${counter}",
            modifier = Modifier.padding(paddingValues)
        )
    }
}

LaunchedEffect の引数にはキーとなるオブジェクトを指定します。再Composeのタイミングでキーの値が変化した際、実行しているコルーチンを中断し再起動してくれます。

一覧に戻る