- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 compose 实现 MVI。为了让我遵循正确的事件循环,我需要通过我的 View 模型传播点击事件,然后观察副作用。我看过一些实现,它们都使用 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有这个警告
Warning: LaunchedEffect(true) is as suspicious as a while(true). Even though there are valid use cases for it, always pause and make sure that's what you need.
我的问题是:
LaunchedEffect
究竟什么时候取消?文档说它与调用站点的生命周期相匹配。这就是本案的组成吗?LaunchedEffect(true)
设置来观察我的项目的副作用吗?有什么替代方案?最佳答案
LaunchedEffect
与它的协程一起被取消,有两种变体:
key
参数已更改 - 在这种情况下,当前的 LaunchedEffect
将被取消并创建一个新的。LaunchedEffect
从生命树中移除,例如,如果你将它(或其任何级别的父级)放在 if
block 中并且条件变为 假
。如果你不需要传递任何应该重启LaunchedEffect
的key
,你可以传递Unit
。任何其他常量,例如您的情况中的 true
,都被认为是可疑的,因为它无法在运行时更改,但对于任何编码人员来说可能看起来像复杂的逻辑。
关于android - 为什么 LaunchedEffect(true) 可疑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70433092/
我只想在可组合加载时运行一次代码。所以我使用 LaunchedEffect with key as true 来实现这一点。 LaunchedEffect(true) { // do API
有没有办法在 LaunchedEffect 中获取 Context?我需要调用某个函数,该函数需要引用 Context 对象才能执行。 我不能使用 LocalContext.current,因为: @
我正在使用 compose 实现 MVI。为了让我遵循正确的事件循环,我需要通过我的 View 模型传播点击事件,然后观察副作用。我看过一些实现,它们都使用 LaunchedEffect(true)
语境 在 Jetpack compose 中,我们可以选择使用 rememberCoroutineScope()以及使用 LaunchedEffect可组合以使用协程/运行挂起功能(显示 snackb
大家好,我正在学习项目中的副作用。我想知道什么时候应该在什么场景下使用LaunchedEffect和SideEffect。我正在使用这两种效果添加一些代码。如果我在这里做错了,请告诉我。 第一次使用L
如果我对文档的理解正确,则在 rememberUpdatedState 未更改的情况下,LaunchedEffect 不应再次运行。 如果我运行类似下面这段代码的代码,那么它不会按预期工作,并且值会在
我是 jetpack compose 的新手,我尝试构建一个小项目来学习 jetpack compose,我有示例代码,并且为了 composableScope.launch 它抛出一个错误,因为启动
为什么 SideEffect 每次我的可组合项失效时都会被调用,但 LaunchedEffect 也不成立? sealed class SomeState { object Error:SomeSt
我是一名优秀的程序员,十分优秀!