LeoColman
11/19/2021, 4:24 PM@NoLiveLiterals
@Composable
fun DonationForm() {
var selected by remember { mutableStateOf(values[1]) }
val coroutineScope = rememberCoroutineScope()
val clientSecret = coroutineScope.async { startDonation(selected.toLong().times(100)) }
Hey guys!
How to make clientSecret
render again everytime selected
is changed?
selected
gets it's state correctly, but clientSecret
is being calculated only once (and not recalculating on recomposition)val clientSecret = selected.run { coroutinescope.... }
worksBig Chungus
11/19/2021, 4:27 PMvar clientSecret by remember { mutableStateOf(1L) }
coroutineScope.launch {
clientSecret = startDonation(selected.toLong().times(100))
}
LeoColman
11/19/2021, 4:28 PMBig Chungus
11/19/2021, 4:29 PM...
)?LeoColman
11/19/2021, 4:30 PMselected.run
I'd trigger recomposition because selected
would change inside a @Compose functionBig Chungus
11/19/2021, 4:32 PMLeoColman
11/19/2021, 4:33 PMDonationForm
selected
lineBig Chungus
11/19/2021, 4:35 PMhfhbd
11/19/2021, 5:13 PMderivedState
? Or remember(selected)
?LeoColman
11/19/2021, 5:54 PMhfhbd
11/19/2021, 6:38 PMderivedState
updates the calculation if a state used inside the calculation block was changed.
alternative using selected as a key for remember
will result into the same behavior: if the key of remember was changed, the calculation will be executed again. Difference between remember and derivedState is optimization, in derivedState
the compiler knows, the reason for recalculation was this state change, so it the recalculation can be scheduled right after the change of the state (change, recalculation, recomposing), and not after changing, recomposing and recalculation and recomposing again.Zach Klippenstein (he/him) [MOD]
11/22/2021, 4:23 PM