我遇到了问题,其中
LaunchedEffect
工作不正确。当用户单击相应的 block
时,我希望 LaunchedEffect
中的 NavigationBarItem
启动一次,因为 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()
})
}
您正在使用
key1 = Unit
,它不会改变,这就是每次可组合项重组时 LaunchedEffect 都会运行的原因。
@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() }
}
val trigger by rememberUpdatedState(1) // Change the key to trigger the effect
LaunchedEffect(key1 = trigger) {
postsViewModel.getAllPosts()
}
}