gpt4 book ai didi

android - 在 Jetpack Compose 的无状态 Compose 中管理条件逻辑

转载 作者:行者123 更新时间:2023-12-05 03:16:22 24 4
gpt4 key购买 nike

我在学习State hosting在喷气背包中。我创建了两个单独的函数 ContentStatefulContentStateLess。在我的 ContentStateLess 中有很多 View ,我正在检查一些条件并相应地更改 View 。我猜测 Stateful compose 中没有条件/业务逻辑。那么在这里执行这种逻辑的正确方法是什么。

ContentStateful

@Composable
fun ContentStateful(
viewModel: PairViewModel = getViewModel()
) {
ContentStateLess(viewModel)
}

ContentStateLess

@Composable
fun ContentStateLess(
viewModel: PairViewModel
) {
Text()
Text()
Image()
if (viewModel.isTrue) {
Image()
// more item here
} else {
Text()
// more item here
}
Image()
}

那么对于ContentStateLess() 中的if - else 逻辑,最好的建议是什么。非常感谢

最佳答案

如果您要构建无状态可组合项,最好不要传递任何类似 ViewModel 的内容。您可以改为传递 bool 参数。当您希望将自定义可组合项移动到另一个屏幕或另一个项目时,您将需要移动 ViewModel。

Google 推荐无状态可组合项的原因是它难以测试,您可以仅使用输入轻松测试可组合项。

您体验到的另一件事是,内部可组合项的状态越多,您为处于您可能未预料到的状态的可组合项创建的曝光度就越高。

当您构建具有一层、两层、三层的简单可组合项时,这可能不是问题,但具有更多状态和层时,状态管理就成为一个严重的问题。而且,如果您以某种方式忘记或错过了可组合项内的某个状态,您最终可能会出现意想不到的行为。因此,为了最大程度地降低风险并使您的可组合项可测试,您的目标应该是在一个地方管理您的状态,并尽可能在一个包含多个状态的状态持有者类中进行管理。

@Composable
fun ContentStateLess(
firstOneTrue: Boolean
) {
Text()
Text()
Image()
if (firstOneTrue) {
Image()
// more item here
} else {
Text()
// more item here
}
Image()
}

关于android - 在 Jetpack Compose 的无状态 Compose 中管理条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74699469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com