代码A来自官方样本 here .
我发现当我更换时应用程序可以正常运行 remember(todo.id) { randomTint() } 具有 remember{ randomTint() } .
remember(todo.id) { randomTint() }
remember{ randomTint() }
之间有什么区别 记住(todo.id){randomTint()} 和 记住{randomTint()} ?
记住(todo.id){randomTint()}
记住{randomTint()}
代码A
@Composable fun TodoRow( todo: TodoItem, onItemClicked: (TodoItem) -> Unit, modifier: Modifier = Modifier, iconAlpha: Float = remember(todo.id) { randomTint() } ) { }
remember 函数用于在重新计算中缓存某些状态。它可以接受零个或多个用于使该缓存无效的附加密钥。如果有 key s的变化,则重新调用lambda来计算新的状态值。
remember
key
在你的例子中 iconAlpha: Float = remember(todo.id) { randomTint() } 这个 iconAlpha 价值被记住是一些 randomTint() 在这里 todo.id 已作为密钥传递,这意味着无论何时 todo.id 将更改缓存的 iconAlpha 将无效,计算块将再次运行,并将新值分配给 iconAlpha .
iconAlpha: Float = remember(todo.id) { randomTint() }
iconAlpha
randomTint()
todo.id