Есть ли лучший способ обновить текст в jetpack compose?

#android #android-jetpack-compose

Вопрос:

Есть ли лучший способ обновить текстовое значение здесь значением из базы данных?

 @Composable
private fun DisplayShops() {
var shopid by remember { mutableStateOf("")}
SideEffect {
    val value = GlobalScope.async {
        val res = withContext(Dispatchers.Default) {
            getDbData() // this gets the database data
            delay(1000)
            shopid=shop_id// the shop_id is variable defined in the activity and it has the value retrieved from the database
        }
    }
}
Text(text =shopid)
    }
 

Ответ №1:

Это не очень хорошее решение по 2 причинам:

  • код будет выполняться при каждой перекомпозиции, поскольку вы используете SideEffect , вы, вероятно, захотите использовать LaunchedEffect вместо этого
  • размещение вашей бизнес-логики в ваших составных материалах не является правильным решением, делает ваши составные материалы тесно связанными с вашим бизнес-уровнем и трудными для тестирования

Вам следует подумать о создании ViewModel приложения, которое будет извлекать данные из базы данных, а затем предоставлять значение, которое вы хотите отобразить, с ViewMOdel помощью MutableState объекта, который вы затем можете наблюдать в своем компонуемом.

Вы можете прочитать это для получения более подробной информации.

Комментарии:

1. Большое спасибо! это сработало отлично, мне даже больше не нужна эта задержка.