[英]jetpack compose. infinite call to observeAsState
我使用observeAsState function 監視視圖模型中的變量的行為。 當我得到我需要的 state 時,我切換到另一個屏幕,但之后我的程序陷入了無限循環。 我做錯了什么,請告訴我?
下圖顯示了來自視圖模型的監控變量的日志
下面的代碼顯示了唯一的 function ,我在其中更改了_loginStatus的值,我需要通過observeAsState對其進行跟蹤。 _loginStatus的值在其他任何地方都沒有變化:
fun authorize(automaticLoad: Boolean = false) = CoroutineScope(Dispatchers.IO).launch {
setStatus(Status.Loading())
repository.authoriseAccount(storedLogin.value.orEmpty().trim(), storedPassword.value.orEmpty().trim(), getApplication()).let {
withContext(Dispatchers.Main) {
when (it) {
is Resource.Success -> {
_loginStatus.postValue(Status.Success(it.data))
}
is Resource.Error -> {
Log.e("AUTH", "auth error")
if (!automaticLoad){
_loginStatus.postValue(Status.Error("Incorrect login or password entered"))
}
else{
_loginStatus.postValue(Status.Error())
}
}
}
//_loginStatus.postValue(Status.Ready())
_loginStatus.setValue(Status.Ready())
}
}
}
可組合 function 中的代碼:
val status by viewModel.loginStatus.observeAsState()
Log.e("tag", status.toString())
我有同樣的問題,我用這種方式解決了
val status by viewModel.loginStatus.observeAsState()
Log.e("tag", status.toString())
LaunchedEffect(true) {
viewModel.authorize()
}
//whatever you want to do with the status variable
原因在這里解釋: https://developer.android.com/jetpack/compose/side-effects
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.