代码之家  ›  专栏  ›  技术社区  ›  HelloCW

记住(todo.id){randomTint()}和记住{randomTint()}有什么区别?

  •  0
  • HelloCW  · 技术社区  · 3 年前

    代码A来自官方样本 here .

    我发现当我更换时应用程序可以正常运行 remember(todo.id) { randomTint() } 具有 remember{ randomTint() } .

    之间有什么区别 记住(todo.id){randomTint()} 记住{randomTint()} ?

    代码A

    @Composable
    fun TodoRow(
        todo: TodoItem,
        onItemClicked: (TodoItem) -> Unit,
        modifier: Modifier = Modifier,
        iconAlpha: Float = remember(todo.id) { randomTint() }
    ) {
    
    
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Arpit Shukla    3 年前

    remember 函数用于在重新计算中缓存某些状态。它可以接受零个或多个用于使该缓存无效的附加密钥。如果有 key s的变化,则重新调用lambda来计算新的状态值。

    在你的例子中 iconAlpha: Float = remember(todo.id) { randomTint() } 这个 iconAlpha 价值被记住是一些 randomTint() 在这里 todo.id 已作为密钥传递,这意味着无论何时 todo.id 将更改缓存的 iconAlpha 将无效,计算块将再次运行,并将新值分配给 iconAlpha .