If X, Y are of type MutableState<String>, in the following snippet ComposableB, ComposableC and ComposableD are recomposed everytime X's state is changed.
Case 1
@Composable
fun ComposableA(
val stateX: State<String>, // X
val stateYProvider: () -> State<String>, // { Y }
) {
ComposableB() {
ComposableC(stateX.value)
ComposableD(stateYProvider)
}
}
But in the following snippet only ComposableB and ComposableC are recomposed everytime X's state is changed
Case 2
@Composable
fun ComposableA(
val stateX: State<String>, // X
val stateYProvider: () -> State<String>, // { Y }
) {
ComposableB() {
ComposableC(stateX.value)
ComposableD({ stateYProvider() })
}
}
Why is this so? Shouldn't Case 1 also recompose only ComposableB and ComposableC as ComposableD's arguments remain same when ComposableB's recomposition happens
Note: Passing states instead of values because every time the state changes ComposableA is getting recomposed, which is unnecessary