#每天一个知识点#
Android Studio 内置Compose实时模板系列
操作方式:选中Compose代码片段,输入缩写,按下 Tab 自动包裹
缩写 名称 功能
WC Wrap Column 用 Column {} 包裹选中代码
WR Wrap Row 用 Row {} 包裹选中代码
W Wrap Box 用 Box {} 包裹选中代码
WS Wrap Surface 用 Surface {} 包裹选中代码WCrd Wrap Card 用 Card {} 包裹选中代码
补充:
1. 这一类 Wrap 模板是实时模板(Live Template),不是系统快捷键,靠缩写+Tab触发。
2. 查看/管理位置:Settings → Editor → Live Templates → Compose
3. 配套查看函数全部参数:
Windows: Alt + Enter → Show function parameters
Mac: Option + Enter
#每天一个知识点#
Jetpack Compose无状态组件示例代码和解释
Jetpack Compose无状态组件不自带任何状态,状态由外部传入、事件回调向外抛出,UI只负责根据入参渲染,是可复用、易测试的纯UI单元,CMP跨平台组件优先推荐这种写法。
```kotlin
@Composable
fun CounterView(count: Int, onAddClick: () -> Unit) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(text = "计数:$count", fontSize = 22.sp)
Button(onClick = onAddClick) { Text("点我+1") }
}
}
```
该组件内部没有remember、mutableStateOf,自身不保存数据。count作为只读入参,UI完全随传入值变化;点击动作不处理计数逻辑,仅回调onAddClick交给上层。上层可以是remember本地状态,也可以是ViewModel的StateFlow,组件本身和状态来源解耦。
无状态组件特点:输入相同参数,渲染结果一定相同,符合纯函数思想;方便预览、单元测试,多页面复用不会互相干扰。它只承担视图展示职责,状态和业务交由父层托管,和有状态组件搭配使用:上层做状态持有,下层大量封装无状态UI控件,这是Compose标准分层范式。相比内部带remember的有状态组件,无状态组件可控性更强,跨端维护成本更低。
Jetpack Compose无状态组件示例代码和解释
Jetpack Compose无状态组件不自带任何状态,状态由外部传入、事件回调向外抛出,UI只负责根据入参渲染,是可复用、易测试的纯UI单元,CMP跨平台组件优先推荐这种写法。
```kotlin
@Composable
fun CounterView(count: Int, onAddClick: () -> Unit) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(text = "计数:$count", fontSize = 22.sp)
Button(onClick = onAddClick) { Text("点我+1") }
}
}
```
该组件内部没有remember、mutableStateOf,自身不保存数据。count作为只读入参,UI完全随传入值变化;点击动作不处理计数逻辑,仅回调onAddClick交给上层。上层可以是remember本地状态,也可以是ViewModel的StateFlow,组件本身和状态来源解耦。
无状态组件特点:输入相同参数,渲染结果一定相同,符合纯函数思想;方便预览、单元测试,多页面复用不会互相干扰。它只承担视图展示职责,状态和业务交由父层托管,和有状态组件搭配使用:上层做状态持有,下层大量封装无状态UI控件,这是Compose标准分层范式。相比内部带remember的有状态组件,无状态组件可控性更强,跨端维护成本更低。
展开
评论
1
![[惊喜]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_93.5ee641b.png)