我想显示一些数据并模拟加载。出于这个原因,我在第一个屏幕上使用LaunchedEffect。它工作正常,但当我添加导航时,LaunchedEffect会启动两次。
导航:第一(LaunchedEffect(->第二->返回第一次(LaunchedEffect再次发射(
我预计当我回到第一个屏幕时,LaunchedEffect不会启动,我会立即看到数据。
发射效果示例:
@Composable
fun FirstScreen(...) {
...
LaunchedEffect(Unit) {
state = State.Loading
delay(2_000L)
state = State.Success(...)
}
}
导航示例:
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = FIRST_ROTE
) {
composable(FIRST_ROTE) { FirstScreen(...) }
composable(SECOND_ROTE) { SecondScreen(...) }
}
查看文档中的
要从可组合文件内部安全地调用suspend函数,请使用CCD_ 1可组合。当CCD_ 2进入构图时,它用作为参数传递的代码块启动一个协程。如果
LaunchedEffect
离开作文如果用不同的键重新组合LaunchedEffect
,则现有的协同程序将已取消,新的挂起功能将在新的共同出游。
当您导航到另一个屏幕时,可组合内容将从合成中删除(这意味着它没有绘制(。这就是再次执行CCD_ 5的原因。
您可以使用视图中的状态模型来控制此执行。类似于:
@Composable
fun FirstScreen(vm: YourViewModel) {
LaunchedEffect(Unit) {
if (vm.someFlag == true) {
vm.someFlag = false
state = State.Loading
delay(2_000L)
state = State.Success(...)
}
}
}