小编Ali*_*aei的帖子

用作输入参数的 Lambda 函数会导致重组

考虑下面的片段

fun doSomething(){
}

@Composable
fun A() {
    Column() {
        val counter = remember { mutableStateOf(0) }
        B {
            doSomething()
        }
        Button(onClick = { counter.value += 1 }) {
            Text("Click me 2")
        }
        Text(text = "count: ${counter.value}")
    }
}

@Composable
fun B(onClick: () -> Unit) {
    Button(onClick = onClick) {
        Text("click me")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当按下“click me 2”按钮时,B compose 函数将被重新组合,尽管其中的任何内容都没有改变。

澄清: doSomething 用于演示目的。如果您坚持要一个实际的例子,您可以考虑以下 B 的用法:

B{
    coroutinScope.launch{
        bottomSheetState.collapse()
        doSomething()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么这个 lamda 函数会导致重组
  2. 修复它的最佳方法

我对这个问题的理解

从 compose 编译器报告中我可以看到 B …

android android-jetpack-compose compose-recomposition

7
推荐指数
1
解决办法
2818
查看次数