You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose的Scaffold中仅用作标题的变量是否需要加remember?

你的想法是不正确的,两个写法的差异和注意事项如下:

核心差异说明

1. 你提到的var toolbarTitle= mutableStateOf("Home")是错误写法

Composable 函数每次触发重组时,函数体内的所有代码都会重新执行。如果没有用remember包裹mutableStateOf,每次重组都会生成新的MutableState实例,之前保存的状态会直接丢失。就算你完全不需要修改标题值,这种写法也会造成不必要的对象创建,存在性能损耗。

2. by是Kotlin属性委托语法糖,非强制但推荐使用

如果不用by,正确的无语法糖写法是:

// 注意这里是val,因为MutableState实例本身不需要被修改,变化的是它内部的value属性
val toolbarTitle = remember { mutableStateOf("Home") }

这种写法下,你读取值必须显式调用.value,赋值也需要写.value:

  • 取值:Text(text = toolbarTitle.value)
  • 赋值:toolbarTitle.value = "新标题"

而用by的写法,编译器会自动帮你处理.value的读写逻辑,你可以直接把toolbarTitle当成普通String变量操作,代码更简洁易读:

var toolbarTitle by remember { mutableStateOf("Home") }
  • 取值:Text(text = toolbarTitle)
  • 赋值:toolbarTitle = "新标题"

两种写法运行效果完全一致,差异仅在代码书写形式上。

3. 静态标题场景的优化

如果你确定这个工具栏标题全程都不会修改,其实连mutableStateOf都不需要用,直接写val toolbarTitle = "Home"即可,不需要状态包裹,性能最优。

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:54:06