看一下Immutable的文档,这里有一个代码示例:
@Immutable
data class Person(val name: String, val phoneNumber: String)
@Composable
fun PersonView(person: Person) {
Column {
Row {
Text("Name: ")
Text(person.name)
}
Row {
Text("Phone: ")
Text(person.phoneNumber)
}
}
}
@Composable
fun PeopleView(people: List<Person>) {
Column {
for (person in people) {
PersonView(person)
}
}
}
并附上说明:
将 Person 设为不可变类型,可以在最后一次组合时跳过调用 PersonView 组合函数。
我的问题是:
如果只有当 @Composable 函数的参数发生更改时才会重新组合,并且像上面代码中的 Person(即仅包含原始值的数据类)不能更改而不创建新实例,那么这里的优化在哪里?
与没有 @Immutable 注释的相同代码相比,何时会跳过对 PersonView Composable 函数的调用?它是否与 PeopleView 的可变/不稳定参数 people: List<Person> 有关?