提问人:Илья Жиленков 提问时间:10/18/2023 最后编辑:Илья Жиленков 更新时间:10/18/2023 访问量:55
LaunchedEffect 启动次数不止一次
LaunchedEffect starts more that once
问:
我遇到了问题,问题在于工作不正常。我想在启动一次时,当用户点击对应时,因为应该只向服务器发送一个请求。我添加了不可变参数以使其不可重新启动,但是每次单击导航按钮时,AppInspection 工具都会显示网络正在使用LaunchedEffect
block
LaunchedEffect
NavigationBarItem
block
Unit
block
@Composable
fun PostScreen(postsViewModel: PostsViewModel) {
val state = postsViewModel.posts.observeAsState()
LazyColumn(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
state.value?.forEach {
item { Post(it) }
} ?: item { CircularProgressIndicator() }
}
LaunchedEffect(key1 = Unit, block = {
postsViewModel.getAllPosts()
})
}
答:
1赞
BenjyTec
10/18/2023
#1
LaunchedEffect(Unit)
当可组合项进入屏幕时,执行一次块。每当您离开并重新选择 BottomNavigation 项时,它都会再次触发。
假设您已经根据文档设置了 NavHost 和 BottomNavigation,解决方案可能非常简单:saveState=true
restoreState=true
@Composable
fun PostScreen(postsViewModel: PostsViewModel) {
var initialComposition by rememberSaveable{ mutableStateOf(true) }
val state = postsViewModel.posts.observeAsState()
LaunchedEffect(Unit) {
if (initialComposition) {
postsViewModel.getAllPosts()
initialComposition = false
}
}
// ...
}
评论
1赞
Thracian
10/18/2023
这可能是问题所在。LaunachedEffect 在引擎盖下被记住。在重构时,也不应记住重新启动LaunchedEffect
评论