我在 Jetpack Compose 中有一个代表汽车的数据类:
data class Car(
val id: Int = 0,
val brand: String = "",
val model: String = "",
val year: Int = 2020
)
在我的可组合项中,我根据 TextField 组件中的用户输入更新此数据类的品牌和模型属性。目前,每次用户输入内容时,我都会使用 copy() 函数,如下所示:
@Composable
fun CarScreen() {
var car by remember { mutableStateOf(Car()) }
Column {
TextField(
value = car.brand,
onValueChange = { newBrand ->
car = car.copy(brand = newBrand) // Using `copy()`
},
label = { Text("Brand") }
)
TextField(
value = car.model,
onValueChange = { newModel ->
car = car.copy(model = newModel) // Using `copy()`
},
label = { Text("Model") }
)
}
}
忧虑:
我担心每次更改文本时都调用 copy() 可能会导致性能问题,因为每次用户在 TextField 中键入内容时,它都会创建一个新的 Car 对象实例。每次击键都会发生这种情况,在包含许多字段的大型应用或表单中,这可能会变得效率低下。
我的问题:
- 在 Jetpack Compose 中,对每个 TextField 调用 copy() 是否会导致性能低下?这种不断创建和重组对象的行为是否会导致明显的性能下降,尤其是在较大的数据模型或频繁输入的情况下?
- 有哪些更好的方法来处理频繁的文本输入更改,而不必一直使用 copy(),同时仍确保 Compose 可以在必要时重组 UI?我想维护一个反应式 UI,而无需过多创建对象。
如果有一种方法,我们可以直接更改数据类值而不是复制对象,并自动触发重组,那会怎样?