fengdai
09/02/2020, 4:19 AMWhen Compose recomposes based on new inputs, it only calls the functions or lambdas that might have changed, and skips the rest.Why is the root Compose function
RecompositionBehavior always recomposed while the Switch only changes the input of MaterialTheme ?
@Preview("RecompositionBehavior")
@Composable
fun RecompositionBehavior() {
Log.d("Recompose", "RecompositionBehavior")
var darkTheme by remember { mutableStateOf(false) }
MaterialTheme(
colors = if (darkTheme) darkColors else lightColors,
) {
Log.d("Recompose", "MaterialTheme")
Surface {
Switch(checked = darkTheme, onCheckedChange = { darkTheme = it })
}
}
}Sebastian Kaspari
09/02/2020, 5:09 PMdarkTheme property is inside the RecompositionBehavior block, so the whole block gets recomposed afaikfengdai
09/03/2020, 1:48 AMdarkTheme from RecompositionBehavior to the MaterialTheme block, MaterialTheme does’t get recomposed when darkTheme is changed. Why?
@Preview("RecompositionBehavior")
@Composable
fun RecompositionBehavior() {
Log.d("Recompose", "RecompositionBehavior")
MaterialTheme(
colors = darkColors,
) {
var darkTheme by remember { mutableStateOf(false) }
Log.d("Recompose", "MaterialTheme")
Surface {
Switch(checked = darkTheme, onCheckedChange = { darkTheme = it })
}
}
}