如果我这样做,那么jetpack中的开发人员将撰写:
var model by remember{ mutableStateOf(false)}
它! !
但为什么我这样做:
var model by remember{ mutableStateOf(Register())}
Register是一个类:
class Register {
var correo: String=""
var password: String=""
var nombre: String=""
var apellido: String=""
var direccion: String=""
var telefono: String=""
var confirmacion: String=""
}
,但第二种方式是不绑定属性我怎么能做到呢?
要让Compose触发重组,你需要改变
的值var model by remember{ mutableStateOf(Register())}
因为默认mutableStateOf
使用SnapshotMutationPolicy
检查两个实例是否相等
fun <T> mutableStateOf(
value: T,
policy: SnapshotMutationPolicy<T> = structuralEqualityPolicy()
): MutableState<T> = createSnapshotMutableState(value, policy)
fun <T> structuralEqualityPolicy(): SnapshotMutationPolicy<T> =
StructuralEqualityPolicy as SnapshotMutationPolicy<T>
private object StructuralEqualityPolicy : SnapshotMutationPolicy<Any?> {
override fun equivalent(a: Any?, b: Any?) = a == b
override fun toString() = "StructuralEqualityPolicy"
}
您可以通过创建一个新的SnapshotMutationPolicy或
设置新的Register
实例到您的model
。我认为最简单的方法是使用数据类然后用data类copy函数创建一个新实例,该函数创建一个新实例,允许您在保持其他属性不变的情况下更改其某些属性
data class Register (
var correo: String=""
var password: String=""
var nombre: String=""
var apellido: String=""
var direccion: String=""
var telefono: String=""
var confirmacion: String=""
)
var model by remember { mutableStateOf(Register()) }
model = model.copy(password = "new password")