Found possible bug while trying to optimize my apps when using different declarations of
MutableState
•
var value by remember { mutableStateOf(default) }
•
val (value, setValue) = remember { mutableStateOf(default) }
Bad one. In this one composable recomposes every time counter is updated (each second)
@Composable
fun App() {
val (counter, setCounter) = remember { mutableStateOf(1) }
LaunchedEffect(null) {
var i = 1
while (true) {
delay(1000)
setCounter(++i)
}
}
println("recomposition")
val str by remember { derivedStateOf { (counter % 10 == 0).toString() } }
Text(str)
}
This one works properly. Recomposes only when needed str changes. (every 10 seconds two times)
@Composable
fun App() {
var counter by remember { mutableStateOf(1) }
LaunchedEffect(null) {
var i = 1
while (true) {
delay(1000)
counter = ++i
}
}
println("recomposition")
val str by remember { derivedStateOf { (counter % 10 == 0).toString() } }
Text(str)
}
Same behavior using android and js.