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のタイミングでキーの値が変化した際、実行しているコルーチンを中断し再起動してくれます。