0

假设您在单击按钮时调用注册 API。

获取 API 响应并转到主屏幕。

在这种情况下,当快速重复按下按钮时,会多次调用 api。

在使用 compose 之前,我使用 Rxjava 在一定程度上解决了这个问题。

compose如何解决这个问题?

4

1 回答 1

1

一般来说,这不是必需的,因为 Compose 会正常处理按钮单击并防止多次单击。但是,如果您正在使用一些自定义按钮并且无论出于何种原因获得多次点击,那么有很多解决方案。但是,您应该在调用 api 时禁用按钮,并且仅在 api 完成后重新启用它。

您可以使用点击去抖动器。它相当于使用 rxJava,但使用了 Kotlin 流程,并具有内置的去抖动方法:

如何在 Jetpack Compose List / Column / Row 中禁用同时点击多个项目(开箱即用的去抖动?)

或者您可以只使用一个充当标志的变量来指示 api 调用已经在执行。如果在 api 调用期间发生任何额外的点击,只要设置了标志,它们就会被忽略。api调用完成后,只需重置标志:

class MyViewModel: ViewModel() {
   private apiInUse = false

   fun someApiCall() {
      if (apiInUse) {
         return
      }

      // Make your api call
      apiInUse = true
      myApi()
      apiInUse = false
   }
}
于 2021-11-26T08:33:53.613 回答