这个功能是如何跟踪点击的



在"写作中的思考;页面我没有这个代码,$clicks是如何跟踪点击次数的?

@Composable
fun ClickCounter(clicks: Int, onClick: () -> Unit) {
Button(onClick = onClick) {
Text("I've been clicked $clicks times")
}
}

我和作曲同时学习科特林,所以我一直很困惑。

该示例中省略了它,但它应该将点击计数存储在用remember包装的MutableState<T>

var clickCount by remember { mutableStateOf(0)}
ClickCounter(clicks = clickCount, onClick = {clickCount += it})

对于像我这样真正的初学者,让我添加我的注释和代码。当调用ClickCounter compositable时,我们需要传递两个参数。

  1. 为了"点击",我们传递初始值0,每次点击按钮时该值都会更改。此外,初始值需要"记住"并跟踪以进行进一步更改。因此,我们在"记住"函数中使用"mutableStateOf"函数创建新变量。

  2. 要"点击",我们需要传递函数,每次点击按钮都会添加1。

作为ClickCounter compositable的调用程序,我制作了一个简单的预览compositable,如下所示。

@Preview(showBackground = true)
@Composable
fun ClickCounterPreview(){
var clicks by remember { mutableStateOf(0) }
// We call ClickCounter composable passing two parameters.
ClickCounter(clicks = clicks, onClick = { clicks += 1 })
}

我对同一个文档感到痛苦,其中有两个错误,因此文本和代码没有任何意义。

  1. 医生说"重新编译是在输入发生更改时再次调用可组合函数的过程。当函数的输入发生变化时,就会发生这种情况。当Compose基于新输入重新组合时,它只调用可能已更改的函数或lambda,跳过其余的">错了将日志语句放入可组合语句中,您将看到调用的可组合语句也会在重新组合时再次运行。这就是Int变量被重置而代码不起作用的实际原因。为了确保没有其他未提及的怪癖,我还在ClickCounter的调用周围添加了包装调用,并记录了它们的运行情况,这证实了我的结果。

  2. 由于(1(代码没有按照文本承诺的方式工作,您需要添加代码并使用记住API,这样变量就不会在重新组合时重置,

var通过记住{mutableStateOf(0(}点击

文档中的代码本身是无用的,使其工作的关键是记住API。

最新更新