Пересылка состояния в лямбда вызывает рекомпозицию, даже если состояние не меняется
Если ,
Y
относятся к типу
MutableState<String>
, в следующем фрагменте, и перекомпоновываются каждый раз при изменении состояния.
Случай 1
@Composable
fun ComposableA(
val stateX: State<String>, // X
val stateYProvider: () -> State<String>, // { Y }
) {
ComposableB() {
ComposableC(stateX.value)
ComposableD(stateYProvider)
}
}
Но только в следующем фрагменте и каждый раз перекомпоновываются
X
состояние изменено
Случай 2
@Composable
fun ComposableA(
val stateX: State<String>, // X
val stateYProvider: () -> State<String>, // { Y }
) {
ComposableB() {
ComposableC(stateX.value)
ComposableD({ stateYProvider() })
}
}
Почему это так? Разве случай 1 не должен также перекомпоновываться только и
ComposableC
в качестве
ComposableD
аргументы остаются прежними, когда
ComposableB
происходит перекомпоновка
Примечание. Передача состояний вместо значений, потому что каждый раз, когда состояние изменяется
ComposableA
перекомпоновывается, что не нужно