kotlin 为什么ImmutableList会导致Jetpack合成中的重组?

mm5n2pyu  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(137)

this article中,它表示如果可组合对象的参数类型是ImmutableList,则它被认为是稳定的,这意味着如果列表没有改变,则可组合对象不会被重新组合。

@Immutable
data class Contact(val name: String, val age: Int)

@Composable
fun ContactRow(contacts: ImmutableList<Contact>, modifier: Modifier = Modifier) {
  var selected by remember { mutableStateOf(false) }
  Row(modifier) {
    ContactDetails(contacts)
    Checkbox(selected, onCheckedChange = {
      selected = !selected
    })
  }
}

@Composable
fun ContactDetails(contacts: ImmutableList<Contact>) {
  Text(text = contacts[0].name)
}

在这里,每次我选中复选框时,ContactDetails可组合对象都会被重新组合,即使我使用的是KotlinX集合中的ImmutableList
我的撰写版本也是1.2.0

bvn4nwqk

bvn4nwqk1#

您这边肯定有个小错误。此处提供的代码是有效的,ContactDetails将被跳过,而不是重新组合。编译器将ContactRow和ContactDetails都标记为稳定且可跳过。

相关问题