ComposeUI中的闭包表达式、属性委托和函数参数
闭包表达式
ComposeUI中闭包作为函数参数的使用方式。
- Name
闭包语法
- Type
- 闭包
- Description
- 尾随闭包语法
- 多个闭包参数
- 带接收者的闭包
- 内联函数与闭包
- Name
常见用途
- Type
- usage
- Description
- 点击回调
- 动画完成处理
- 数据转换
- 条件判断
闭包表达式示例
// 基本闭包参数
fun perform(completion: () -> Unit) {
// 执行某些操作
completion()
}
// 组件中的闭包
Button(
onClick = {
println("按钮被点击")
}
) {
Text("点击")
}
// 带参数的闭包
fun process(handler: (Int) -> String) {
val result = handler(42)
println(result)
}
属性委托
ComposeUI中属性委托的定义和使用。
- Name
委托类型
- Type
- delegate
- Description
- remember委托
- mutableStateOf
- derivedStateOf
- by关键字
- Name
使用场景
- Type
- scenarios
- Description
- 状态管理
- 数据派生
- 懒加载
- 观察者模式
属性委托示例
@Composable
fun ContentView() {
var firstName by remember { mutableStateOf("张") }
var lastName by remember { mutableStateOf("三") }
// 派生状态
val fullName by remember {
derivedStateOf { "$firstName$lastName" }
}
// 可观察状态
var score by remember { mutableStateOf(0) }
LaunchedEffect(score) {
println("分数更新: $score")
}
}
函数参数传递
ComposeUI中不同类型参数的传递方式。
- Name
参数类型
- Type
- parameters
- Description
- 值类型参数
- 引用类型参数
- 默认参数值
- 具名参数
- Name
修饰符
- Type
- modifiers
- Description
- @Composable注解
- crossinline
- noinline
- vararg
参数传递示例
// 组合函数参数
@Composable
fun CustomButton(
text: String,
enabled: Boolean = true,
onClick: () -> Unit
) {
Button(
onClick = onClick,
enabled = enabled
) {
Text(text)
}
}
// 具名参数调用
CustomButton(
text = "点击我",
enabled = true
) {
// 点击处理
}
最佳实践
参数传递和状态管理的推荐做法。
- Name
闭包使用
- Type
- 闭包-tips
- Description
- 合理使用remember
- 避免副作用
- 注意重组开销
- 提升闭包
- Name
性能考虑
- Type
- performance
- Description
- 避免不必要的重组
- 合理使用derivedStateOf
- 状态提升
- 使用remember 缓存
最佳实践示例
@Composable
fun Screen(viewModel: ViewModel) {
// 提升闭包避免重组
val onClick = remember {
{ /* 处理点击 */ }
}
// 缓存计算结果
val computedValue by remember {
derivedStateOf {
// 复杂计算
heavyComputation()
}
}
}