[英]When to use derivedStateOf in Jetpack Compose?
在我的 ViewModel 中,我有
private val _topicsResponse = MutableStateFlow<Result<List<Topic>>>(Result.Initial)
val topicsResponse = _topicsResponse.asStateFlow()
我從服務器獲取數據(主題),這就是數據包裝在Result<T>
class 中的原因。它可以是Result.Initial
、 Result.Loading
、 Result.Success
和Result.Error
在我的主題屏幕撰寫 function 中,我有使用 Snackback 顯示錯誤的邏輯
val topicsResponse: Result<List<Topic>> by topicsViewModel.topicsResponse.collectAsState()
Box(modifier = Modifier.fillMaxSize()) {
...
if (topicsResponse is Result.Error) {
Snackbar(
action = {
Button(onClick = { topicsViewModel.loadTopics() }) {
Text(stringResource(id = R.string.retry_text))
}
},
modifier = Modifier
.padding(8.dp)
.align(Alignment.BottomCenter)
) { Text(text = "Test error message") }
}
}
這里用topicsResponse is Result.Error
好不好?
所以我不確定我是否應該使用
val showSnackBarError by remember {
derivedStateOf {
topicsResponse is Result.Error
}
}
或者只是val showSnackBarError = topicsResponse is Result.Error
topicsViewModel.topicsResponse.collectAsState()
- collectAsState
已經在其實現中remember
了
但topicsResponse is Result.Error
將在每次重組時計算,即使這種情況的結果與我理解的相同
是的, topicsResponse is Result.Error
將在每次重組時計算,但如果結果沒有改變——你根本不應該關心它。 實際上,這種“計算”對性能沒有影響。
你可以在這里使用remember
並且它會起作用,但remember
本身的成本is
操作要大得多。 所以你會在這方面失去表現。
至於derivedStateOf
- 在這里使用它沒有意義。 它用於跟蹤多個 state 變化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.