管理jetpack compose中无状态compose中的条件逻辑



我正在学习State hosting in jetpack compose。我创建了两个分离的函数ContentStatefulContentStateLess。在我的ContentStateLess中,它们内部有很多视图,我正在检查一些条件并相应地改变视图。我猜Stateful组合中没有条件/业务逻辑。那么在这里做这种逻辑的正确方法是什么呢?

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这样的东西。你可以传递布尔参数。当你想移动你的自定义组合到另一个屏幕或另一个项目时,你需要移动ViewModel。

Google推荐无状态可组合物的原因是它很难测试,你可以很容易地测试一个只有输入的可组合物。

另一件你要经历的事情是,内部可组合物的状态越多,你为可组合物创建的状态就越暴露,而你可能没有预料到。

当您构建具有一层,两层,三层的简单可组合物时,可能不是问题,但如果有更多的状态和层,状态管理就会成为一个严重的问题。如果您不知何故忘记或错过了Composable中的一个状态,那么您可能会得到一个意想不到的行为。因此,为了最小化风险并使您的可组合物可测试,您应该致力于在一个地方管理您的状态,并且可能在包含多个状态的状态持有者类中。

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

最新更新