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 })
}
}
}