忽视 Jetpack Compose Effect Handlers 的使用:可能的后果?

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

当前正在阅读有关 Jetpack Compose 副作用和效果处理程序的内容:Android 文档

我不清楚的是:当我使用所描述的效果处理程序(Launched Effect、DisposableEffect 等)时,会发生什么?

忽视效果处理程序的使用会导致什么后果?

android kotlin concurrency android-jetpack-compose
1个回答
0
投票

由于还没有人回答,我想分享一下我的想法。

忽视效果处理程序的使用会导致什么后果?

如果您不想使用

LaunchedEffect
DisposableEffect
,您要么必须自己编写大量代码,要么无法实现某些用例。

下面列出了内置效果处理程序可以轻松覆盖的一些用例:

  • 当可组合项最初进入屏幕时执行一些挂起函数
  • 当可组合项离开屏幕时执行某些功能
  • 每当参数值发生更改时执行一些代码

如果您还不太熟悉 Compose,可能不清楚为什么需要这些。但是在实现一些用例时,总会有需要它们的时候。

请参阅这个简单的示例:
您希望在显示可组合项后立即触发网络功能。我写的第一种方法如下:

@Composable
fun MyComposable(networkViewModel: NetworkViewModel, inputParam1: String, inputParam2: Int) {
    //...
    myData = networkViewModel.loadData()
}

但是现在,每当

inputParam1
inputParam2
发生变化时,都会发生重组,并且
loadData
函数将再次被调用。我们可以通过使用
LaunchedEffect
:

轻松解决这个问题
@Composable
fun MyComposable(networkViewModel: NetworkViewModel, inputParam1: String, inputParam2: Int) {
    //...
    LaunchedEffect(Unit) {
        myData = networkViewModel.loadData()
    }
}

这样,该函数仅被调用一次,我们也可以轻松地将

loadData
设为挂起函数,因为
LaunchedEffect
执行协程中包含的代码。

© www.soinside.com 2019 - 2024. All rights reserved.