我有以下Android Jetpack Compose组件:
@Composable
fun TestScreen(){
println("inside-TestScreen()")
var number by remember{ mutableStateOf(1) }
Button(onClick = { number++ }) {
println("inside-Button()")
Column {
println("inside-Column()")
Text("Hello $number")
}
}
}
在编写时,将记录以下内容:
inside-TestScreen()
inside-Button()
inside-Column()
但是,当我点击按钮(即更改状态变量number
)时,会发生重组,并记录以下内容:
inside-Button()
inside-Column()
显然,Button内容被重新组合了,我不明白为什么。Button内容没有使用number
变量,所以我认为Jetpack Compose会足够聪明,知道Button内容不需要重新组合。我以为只有Column内容会重新组合,并且只有inside-Column()
会被记录。
为什么Button的内容会重新组合,即使它对已更改的状态没有依赖性?
1条答案
按热度按时间kb5ga3dv1#
因为
Column
,Box
,Row
和任何内联并返回Unit的Composable都不会创建scope。当重组发生时,Jetpack Compose会检查出最接近的重组范围,即您示例中Button的内容。您可以参考这些答案,了解更多细节和第一个链接中的文章。
Jetpack Compose Smart Recomposition
Why does mutableStateOf without remember work sometimes?