gpt4 book ai didi

android - 防止 LaunchedEffect 在配置更改时重新运行

转载 作者:行者123 更新时间:2023-12-04 23:43:52 26 4
gpt4 key购买 nike

我只想在可组合加载时运行一次代码。所以我使用 LaunchedEffect with key as true 来实现这一点。

LaunchedEffect(true) {
// do API call
}
此代码工作正常,但只要有任何配置更改(如屏幕旋转),此代码就会再次执行。如果配置更改,如何防止它再次运行?

最佳答案

最简单的解决方案是存储有关您是否使用 rememberSaveable 进行 API 调用的信息。 : 当配置改变时它会生效。

var initialApiCalled by rememberSaveable { mutableStateOf(false) }
if (!initialApiCalled) {
LaunchedEffect(Unit) {
// do API call
initialApiCalled = false
}
}
此方案的缺点是如果在 API 调用完成之前配置更改, LaunchedEffect协程将被取消,您的 API 调用也将被取消。
最干净的解决方案是使用 View 模型,并在 init 中执行 API 调用。 :
class ScreenViewModel: ViewModel() {
init {
viewModelScope.launch {
// do API call
}
}
}

@Composable
fun Screen(viewModel: ScreenViewModel = viewModel()) {

}
official documentation 建议将这样的 View 模型作为参数传递.在产品代码中,您不需要将任何参数传递给此 View ,只需将其称为 Screen() : 默认创建 View 模型 viewModel()范围。它被移至测试/预览功能的参数,如 this answer 所示。 .

关于android - 防止 LaunchedEffect 在配置更改时重新运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69629427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com