When passing lambda to button's onClick, it triggers recomposition every time parent is recomposed.
I somewhat understand why that happens, because for lambda is just object of a class and if it contains unstable variables, it will trigger recomposition.
fun mainScreenDestination(
viewModel: MainViewModel.ViewModel = hiltViewModel()
) {
HomeScreenHeader(
title = //some mutable data
onStatsClick = {
viewModel.onStatsClicked()
}
)
}
@Composable
fun HomeScreenContent(
modifier: Modifier = Modifier,
title: String,
onStatsClick: () -> Unit = {}
) {
Button(
onClick = onStatsClick,
.....
){}
Text(text = title)
}
- So the solution I find everywhere is to pass reference to the function as a parameter, but result is same for me, why doesn't it work?
fun mainScreenDestination(
viewModel: MainViewModel.ViewModel = hiltViewModel()
) {
HomeScreenHeader(
title = //some mutable data
onStatsClick = viewModel::onStatsClicked
)
}
- And the next solution is to remember lambda in composition context and pass it as
val onStatsClicked = remember<() -> Unit> { viewModel::onStatsClicked}
even tho this works what are the alternatives, because I dont want to "remember" all the needed lambdas