当前正在阅读有关 Jetpack Compose 副作用和效果处理程序的内容:Android 文档
我不清楚的是:当我不使用所描述的效果处理程序(Launched Effect、DisposableEffect 等)时,会发生什么?
忽视效果处理程序的使用会导致什么后果?
由于还没有人回答,我想分享一下我的想法。
忽视效果处理程序的使用会导致什么后果?
如果您不想使用
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
执行协程中包含的代码。