LaunchedEffect 启动次数不止一次

问题描述 投票:0回答:1

我遇到了问题,其中

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()
    })
}
android kotlin android-jetpack-compose android-jetpack side-effects
1个回答
0
投票

您正在使用

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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.