【问题标题】:Error when using get() within @Composable (Jetpack Compose)在 @Composable (Jetpack Compose) 中使用 get() 时出错
【发布时间】:2021-09-02 03:27:40
【问题描述】:

是否可以在 @Composable 函数中使用 get() 属性?我得到一个“意外的令牌”。

我们如何在 compose 中使用 set 和 get 属性?

val g:Int get()=88 // < works as expected outside @Composable

@Composable
fun Test() {
    val g:Int get()=88 // <  "unexpected token" error inside @Composable
}

【问题讨论】:

    标签: kotlin android-jetpack-compose


    【解决方案1】:

    在 composeables 中禁止使用支持属性,因为它会在 get() 结果更改时阻止 Compose 更新以及缓存结果以进行重复操作。

    您应该使用remember 变量。详细了解states in compose

    假设您的变量是根据其他一些变量计算的。然后,使用remember,您可以缓存该操作的结果。您需要将您的 g 所依赖的所有变量作为键传递给 remember,以便在其中一个键更改之前只计算一次:

    @Composable
    fun TestView(a: Int = 44, b: Int = 2) {
        val g = remember(a, b) { a * b }
    }
    

    您也可以使用view model,但在这种情况下,您将负责使用新的g 值重新组合视图,例如对将更改的值使用可变状态。在这种情况下,计算也不会被缓存。

    class ScreenViewModel : ViewModel() {
        val a by mutableStateOf(44)
        val b by mutableStateOf(2)
        val g: Int
            get() = a * b
    }
    
    @Composable
    fun TestView() {
        val viewModel = viewModel<ScreenViewModel>()
        viewModel.g
    

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 2022-12-08
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多