如何在 Jetpack Compose 中支持智能重组

时间:2021-06-20 10:26:32

标签: android-jetpack-compose

Jetpack compose 文档说,如果所有输入都稳定且没有改变,它可以跳过重组。稳定类型的定义是这样的...

<块引用>

稳定类型必须遵守以下约定:

  1. 对于相同的两个实例,两个实例的 equals 的结果将永远相同。
  2. 如果类型的公共属性发生更改,则会通知 Composition。
  3. 所有公共属性类型也是稳定的。

我无法清楚地理解这一点。有人可以向我解释 compose 如何检查类型是否稳定?我可以理解如果 compose 确定一个类型是稳定的,那么它将使用 equals 方法检查相等性。但是如何说一个类是否稳定,以便我们尽可能地理解和支持智能重组?

我试着玩了一下,发现了以下内容。

This data class Student is not stable, even if I pass the same instance again, its recomposing


data class Student(
     var id:Int=1,
     var name:String="Anonymous")

然而,当我们再次传递同一个实例时,以下类被视为稳定的并且有利于智能重组

This class is stable when all the public parameters are changed to val

data class Student(
     val id:Int=1,
     val name:String="Anonymous")

所以,我可以理解所有公共属性都应该是不可变的。但令我困惑的是,以下课程也被视为稳定的,并支持智能重组。为什么?

This MainActivityVM class is considered Stable when passing like

@Composable
fun StudentList(viewModel:MainActivityVM){
   ...
}

class MainActivityVM : ViewModel() {

   val studentNames = mutableStateListOf<Student>()
   var textInputDialogState by mutableStateOf(TextInputDialogState())

   var publicMutableProperty:String = "This is mutable"
}

所以,我无法确切地弄清楚 compose 如何检查稳定类型。有人可以帮助我理解这一点,以便我可以在代码中有效地支持智能重组吗?

0 个答案:

没有答案