我可以将可组合函数存储在变量中吗?
Can I store a composable function in a variable?
在 Kotlin 中,函数是第一个 class 公民。我们可以将函数存储在变量中,如下所示
val functionVariable: () -> Unit = ::myFunction
fun myFunction() { }
但是,对于@Composable
函数,我该怎么做呢?
如果我做了下面的事情,它会大喊大叫,即 org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@e93b05f8 (error: could not render message)
val functionVariable: () -> Unit = ::myFunction
@Composable
fun myFunction() { }
有没有办法将可组合函数存储为变量?
尚不支持可组合函数引用(这就是错误消息的实际含义)。此外,@Composable
注释是函数签名的一部分,因为它为函数添加了一些参数。所以你需要使用 val functionVariable: @Composable () -> Unit = { myFunction() }
.
您可以声明一个可组合的函数变量,例如:
var functionVariable: @Composable () -> Unit = {}
稍后您可以重新分配它(本质上是重新定义它),例如:
functionVariable = { myFunction1() }
或
functionVariable = { myFunction2() }
但是,如果您已将 functionVariable 植入较大的可组合项中,则重新分配可能不会触发重组。我所做的是声明一个状态变量,如:
var functionAssigned by mutableStateOf(0)
在你放置 functionVariable 的更大的 Composable 中,做:
if (functionAssigned >= 0) functionVariable()
每当你想重新分配变量时,做:
functionVariable = { myFunction2() }
functionAssigned++
这将触发所需的重组。
在 Kotlin 中,函数是第一个 class 公民。我们可以将函数存储在变量中,如下所示
val functionVariable: () -> Unit = ::myFunction
fun myFunction() { }
但是,对于@Composable
函数,我该怎么做呢?
如果我做了下面的事情,它会大喊大叫,即 org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@e93b05f8 (error: could not render message)
val functionVariable: () -> Unit = ::myFunction
@Composable
fun myFunction() { }
有没有办法将可组合函数存储为变量?
尚不支持可组合函数引用(这就是错误消息的实际含义)。此外,@Composable
注释是函数签名的一部分,因为它为函数添加了一些参数。所以你需要使用 val functionVariable: @Composable () -> Unit = { myFunction() }
.
您可以声明一个可组合的函数变量,例如:
var functionVariable: @Composable () -> Unit = {}
稍后您可以重新分配它(本质上是重新定义它),例如:
functionVariable = { myFunction1() }
或
functionVariable = { myFunction2() }
但是,如果您已将 functionVariable 植入较大的可组合项中,则重新分配可能不会触发重组。我所做的是声明一个状态变量,如:
var functionAssigned by mutableStateOf(0)
在你放置 functionVariable 的更大的 Composable 中,做:
if (functionAssigned >= 0) functionVariable()
每当你想重新分配变量时,做:
functionVariable = { myFunction2() }
functionAssigned++
这将触发所需的重组。