Why is LaunchedEffect(true) suspicious?(为什么LaunchedEffect(真的)可疑?)
                            本文介绍了为什么LaunchedEffect(真的)可疑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我正在使用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")
    }
}
这会导致我对任何具有导航或一次性事件的屏幕使用LaunchedEffect(true),但official documentation有此警告
警告:LaunchedEffect(TRUE)像一段时间(TRUE)一样可疑。即使它有有效的用例,也要始终暂停并确保这是您所需要的。
我的问题是:
- 取消
LaunchedEffect的确切时间是什么时候?文档说它与调用站点的生命周期相匹配。这就是本例中的作文吗? - 考虑到官方文件中有警告吗?我不应该使用这个
LaunchedEffect(true)设置来观察我的项目的副作用吗?有什么替代方案? 
推荐答案
LaunchedEffect及其协程在两个变体中被取消:
- 传递的
key参数已更改-在这种情况下,当前LaunchedEffect将被取消,并将创建一个新参数。 LaunchedEffect从生命树中删除,例如,如果您将其(或其任何级别的父级)放入if块中,条件变为false。
LaunchedEffect的key,则可以传递Unit。任何其他常量,如您的案例中的true,都被认为是可疑的,因为它不能在运行时更改,而且对任何程序员来说都可能看起来像复杂的逻辑。
                        这篇关于为什么LaunchedEffect(真的)可疑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:为什么LaunchedEffect(真的)可疑?
				
        
 
            
        
             猜你喜欢
        
	     - 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
 - 想使用ViewPager,无法识别android.support.*? 2022-01-01
 - Android viewpager检测滑动超出范围 2022-01-01
 - 用 Swift 实现 UITextFieldDelegate 2022-01-01
 - android 4中的android RadioButton问题 2022-01-01
 - MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
 - Android - 拆分 Drawable 2022-01-01
 - 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
 - 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
 - Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
 
				
				
				
				