OnClick 多次执行函数
OnClick execute function multiple time
我正在尝试学习 Jetpack Compose,但我在导航方面遇到了一些困难,特别是我不明白为什么这段代码会打印两次“notwork”。
@Composable
fun NavigationController() {
var navController = rememberNavController()
NavHost(navController, startDestination = DummyRoutes.Dummy.route) {
composable(route = DummyRoutes.Dummy.route) {
Dummy(
openHome = { navController.navigate(SomeRoutes.SomeOther.route) },
)
}
}
}
@Composable
fun Dummy(
openHome: () -> Unit,
) {
Log.d("hello", "notwork: ")
Button(onClick = {openHome()}) {
}
可组合组件每次更改参数时都会重新组合。在您的情况下,它是 openHome
。可能是在 NavigationController 中更改了 lambda。
Here 是一篇关于通过案例研究理解重组的有趣文章
NavHost
由于过渡动画而重新组合其目的地。
对于初始路线,它只会发生两次,但如果您尝试导航到另一个屏幕,两个 appearing/disappearing 屏幕都会有更多的重组。这是预期的行为。
如果您使用自己的动画,您的视图将每帧重新组合一次,这也可以。
有时您可以减少重组次数,例如当您使用经常变化的状态(如惰性列表状态)时,请查看 了解更多详情。
但是对于动画和导航你不能减少这个数字,你也不应该,因为屏幕实际上需要经常重绘。如果您构建得当 - 正确处理副作用,额外的重组不会影响您的应用程序性能。在 Thinking in Compose.
中查看有关重组和副作用的更多详细信息
我正在尝试学习 Jetpack Compose,但我在导航方面遇到了一些困难,特别是我不明白为什么这段代码会打印两次“notwork”。
@Composable
fun NavigationController() {
var navController = rememberNavController()
NavHost(navController, startDestination = DummyRoutes.Dummy.route) {
composable(route = DummyRoutes.Dummy.route) {
Dummy(
openHome = { navController.navigate(SomeRoutes.SomeOther.route) },
)
}
}
}
@Composable
fun Dummy(
openHome: () -> Unit,
) {
Log.d("hello", "notwork: ")
Button(onClick = {openHome()}) {
}
可组合组件每次更改参数时都会重新组合。在您的情况下,它是 openHome
。可能是在 NavigationController 中更改了 lambda。
Here 是一篇关于通过案例研究理解重组的有趣文章
NavHost
由于过渡动画而重新组合其目的地。
对于初始路线,它只会发生两次,但如果您尝试导航到另一个屏幕,两个 appearing/disappearing 屏幕都会有更多的重组。这是预期的行为。
如果您使用自己的动画,您的视图将每帧重新组合一次,这也可以。
有时您可以减少重组次数,例如当您使用经常变化的状态(如惰性列表状态)时,请查看
但是对于动画和导航你不能减少这个数字,你也不应该,因为屏幕实际上需要经常重绘。如果您构建得当 - 正确处理副作用,额外的重组不会影响您的应用程序性能。在 Thinking in Compose.
中查看有关重组和副作用的更多详细信息