Jetpack Compose 记住的实际功能是什么?它在幕后是如何工作的?

2024-01-05

查看 Codelab 的基本教程,其中有一个片段可以在单击时增加按钮上的计数器

@Composable
fun MyScreenContent(names: List<String> = listOf("Android", "there")) {
    val counterState = remember { mutableStateOf(0) }

    Column(modifier = Modifier.fillMaxHeight()) {
        Column(modifier = Modifier.weight(1f)) {
            for (name in names) {
                Greeting(name = name)
                Divider(color = Color.Black)
            }
        }
        Counter(
            count = counterState.value,
            updateCount = { newCount ->
                counterState.value = newCount
            }
        )
    }
}


@Composable
fun Counter(count: Int, updateCount: (Int) -> Unit) {
    Button(
        onClick = { updateCount(count + 1) },
        colors = ButtonConstants.defaultButtonColors(
            backgroundColor = if (count > 5) Color.Green else Color.White
        )
    ) {
        Text("I've been clicked $count times")
    }
}

很清楚remember { mutableStateOf(0) }存储状态/值。我的问题是,remember 在幕后的作用是什么。使用var count = remember { 0 } or mutableStateOf(0)没有remember不会增加价值。

fun MyScreenContent(names: List<String> = listOf("Android", "there")) {
   
    var count = remember { 0 }

    Column(modifier = Modifier.fillMaxHeight()) {
        Column(modifier = Modifier.weight(1f)) {
            for (name in names) {
                Greeting(name = name)
                Divider(color = Color.Black)
            }
        }
        Counter(
            count = count,
            updateCount = { newCount ->
                count = newCount
            }
        )
    }
}

上面的代码片段不会更新打印的值Text,确实记得只适用于MutableState?


remember- 允许您记住先前重组调用的状态,仅此而已。 因此,如果您在初始运行时随机化颜色。随机颜色仅计算一次,然后在需要重新合成时重复使用。

因此,

remember= 存储该值以防调用重组。

现在,第二件重要的事情是知道什么时候reCompose实际上应该被触发,并且可变状态会提供帮助。

mutablestate= 存储值,如果我更新值触发器,则使用此数据重构所有元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose 记住的实际功能是什么?它在幕后是如何工作的? 的相关文章

随机推荐

  • 如何去掉列表中的重复项,但保持顺序

    我在用Lambda 中级学生在 DrRacket 中 我想知道如何删除列表中的重复项 同时保持顺序 例如 remove dup list 2 5 4 5 1 2 会产生 list 2 5 4 1 到目前为止 我有这个 define remo
  • Wordpress get_template_directory_uri() 返回 http 而不是 https

    我们最近在我们的网站上应用了 SSL 证书 我们希望所有的 url 都具有 https 协议 一旦我们将网站移至 https 我们的网站就崩溃了 因为仍然指向 http 的资源很少 经过一段时间的研究 我发现 get template di
  • xgoogle python 库不再工作了?

    我在我的一个项目中使用了 xgoogle python 库 直到最近它都运行良好 我没有得到以前得到的结果集 如果使用过 Peter Krummins 编写的这个库的人遇到类似的情况 你能建议一个解决方法吗 The 的存在Beautiful
  • 请求全屏刷新对象标签中的数据(html canvas)

    我在视图页面上有一个按钮 可以使带有 id 游戏的对象标签全屏显示 视图 html span span main js function fullScreen var elem document getElementById game if
  • Apple 支付按钮未以条纹显示

    您好 我正在使用 iphone 6s safari 浏览器 但未显示付款请求按钮 对于网站 我的所有步骤都是正确的 我使用了 https 服务器 ngrok 还在 Stripe Apple Pay 认证中添加我的域名 使用 Safari I
  • 我可以使用简单的 html 来创建单行大小的 QTextEdit 吗?

    我需要显示简单的状态行以及包含以下样式的文本 color bold italic QTextEdit可以渲染简单的 HTML 但它也强制扩展到多行 添加红色背景以强调尺寸QTextEdit 所需的大小是一个文本行的大小 我该如何实现这一目标
  • “未指定 SMTP 主机。” - 但它是指定的?

    我在这里有点困惑 我收到以下错误 未指定 SMTP 主机 即使我的代码看起来是正确的 从我所看到的 我可以通过包含控制器内部的所有详细信息来手动完成此操作 例如 SmtpClient smtpClient new SmtpClient sm
  • 在哪里可以找到所有英国_完整_邮政编码的列表,包括街道名称及其精确坐标?

    在哪里可以找到英国所有的名单full邮政编码 包括街道名称及其精确坐标 它们不应该像 AB1 AB23 等 而是 AB1 2AA AB23 5ZZ 等 最好是免费的 Thanks 您现在可以从地形测量局免费获取邮政编码数据https www
  • 使用绑定时如何使子 NSManagedObjectContext 保持最新状态

    我有一个NSManagedObjectContext设置为有一个NSPrivateQueueConcurrencyType我在我的应用程序中大部分时间都在使用它 除此之外 我还创建了一个子 MOCNSMainQueueConcurrency
  • 用于多个项目的 QML 中继器,无需包装项目

    我想要创建一个看起来像这样的视图 为了简洁起见 我省略了一个专栏 text headr text item1 item2 text item3 item4 item5 item6 并一直尝试使用 GridLayout 来做到这一点 问题是我
  • Rails 4 - simple_form 和从 url 预填充字段

    我正在使用 simple form 我想在表单中预先填充几个字段 在表单的链接中 我将几个值传递给 URL 中的参数 当我尝试将值传递给整数或关联字段时 就会出现麻烦 无论哪种情况 该字段都不会预先填充 下面的示例 前两个字段填充得很好 但
  • std::pow 给出小数指数的错误近似值

    这就是我想要做的事情 double x 1 1402 double pow 1 3 std pow x pow 1 结果是 0 但我期望 0 4465 方程是 1 x 3 1 1402 find x 1 3 是 0 这是整数除法 Try d
  • 当 Ionic 2 中的值发生变化时检索本地存储值

    我正在使用 ionic 2 框架 并且尝试使用本地存储来存储网络状态 this local new Storage LocalStorage this local set status this status 有两个值 强 和 弱 可以动态
  • Nginx 和 FastCGI 下载 PHP 文件而不是处理它们

    我在 Windows 7 64 位 PHP 5 4 12 和 Nginx 1 5 8 上运行 我已经阅读了许多有关设置和解决此问题的教程 即当从本地主机请求 PHP 文件时 它将其作为文件下载 而不是显示 PHP 页面 下面是我的 ngin
  • 按日期顺序全局搜索文件?

    我的 python 脚本中有这行代码 它在特定目录中的所有文件中搜索 cycle log for searchedfile in glob glob cycle log 这工作得很好 但是当我将脚本运行到网络位置时 它不会按顺序搜索它们 而
  • 水晶报表自定义纸张尺寸?

    我需要水晶报告中的自定义纸张尺寸 例如宽度 5 英寸和高度 7 英寸 是否可以 IIRC 您在打印机上设置自定义纸张尺寸 然后当您在设计时在报告中设置打印机时 Crystal 会拉出自定义尺寸
  • 通过 Kafka 报告 (prometheus) 指标

    我正在寻找一种将 Prometheus 与应用程序解耦的方法 通过在中间放置 Kafka 来实现如下目标 Application metrics gt Kafka gt Prometheus 为了解决这个问题我有两个问题 是否有任何 Jav
  • Firestore社交网络数据结构

    如何构建社交网络数据库结构 例如twitter我们可以在我们的时间线中关注用户并获取他们的所有推文 我已经检查过了Firestore 如何构建 feed 和 follow 系统 https stackoverflow com questio
  • 检查序言列表元素的关系

    可以说我有关系 Happy james Happy harry unhappy Tom unhappy Ben unhappy Dick 然后是人员名单 Ben James Harry Tom Dick 如何迭代列表并检查每个列表元素的布尔
  • Jetpack Compose 记住的实际功能是什么?它在幕后是如何工作的?

    查看 Codelab 的基本教程 其中有一个片段可以在单击时增加按钮上的计数器 Composable fun MyScreenContent names List