相关疑难解决方法(0)

为什么 LaunchedEffect(true) 可疑?

我正在努力使用 compose 来实现 MVI。为了让我遵循正确的事件循环,我需要通过我的视图模型传播点击事件,然后观察副作用。我研究了一些实现,它们都用于LaunchedEffect(true)观察副作用并采取行动。

我有一个类似的设置,例如:

@Composable
fun HelloComposeScreen(
    viewModel: MyViewModel = hiltViewModel(),
    onClickedNext: () -> Unit
) {
    LaunchedEffect(true) {
        viewModel.sideEffect.collectLatest { sideEffect ->
            when (sideEffect) {
                DashboardSideEffect.CreateParty -> onClickedNext()
            }
        }
    }
    Button(
        onClick = { viewModel.onEvent(UserEvent.ClickedButton)},
    ) {
        Text("Click Me")
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致我使用LaunchedEffect(true)任何具有导航或一次性事件的屏幕,但官方文档有此警告

警告:LaunchedEffect(true) 与 while(true) 一样可疑。尽管它有有效的用例,但请始终停下来并确保这就是您所需要的。

我的问题是:

  • 具体什么时候取消LaunchedEffect?文档说它与调用站点的生命周期相匹配。这是本例中的组成吗?
  • 考虑到官方文档有警告吗?我不应该使用此LaunchedEffect(true)设置来观察我的项目的副作用吗?有什么替代方案吗?

android android-jetpack-compose

5
推荐指数
1
解决办法
4212
查看次数

标签 统计

android ×1

android-jetpack-compose ×1