簡體   English   中英

除了狀態提升之外,我可以與 Jetpack Compose 一起使用的其他狀態管理選項?

[英]Other state management options that I may use with Jetpack Compose, beyond State hoisting?

我正在學習 Jetpack compose,到目前為止,我已經看到將狀態提升到可組合的調用者以使可組合的無狀態是要走的路。 我一直在我的 Compose 應用程序中使用這種模式。

對於我需要從樹的許多不同位置修改的應用程序狀態,我將不得不傳遞大量回調,這可能變得難以管理。

我以前對 Flutter 有過一些經驗。 Flutter 在樹中為其后代提供狀態以克服上述問題的方式是使用其他機制來管理狀態,即 Provider + ChangeNotifier。

基本上,使用 Provider,Provider Widget 被放置在樹中,並且提供者的所有子級都可以訪問它公開的值。

除了狀態提升之外,還有其他機制來管理 Jetpack Compose 應用程序中的狀態嗎? 而且,你會推薦什么?

如果您需要在視圖之間共享一些數據,您可以使用視圖模型

@Composable
fun TestScreen() {
    val viewModel = viewModel<SomeViewModel>()
    Column {
        Text("TestScreen text: ${viewModel.state}")
        OtherView()
    }
}

@Composable
fun OtherView() {
    val viewModel = viewModel<SomeViewModel>()
    Text("OtherScreen text: ${viewModel.state}")
}

class SomeViewModel: ViewModel() {
    var state by mutableStateOf(UUID.randomUUID().toString())
}

層次結構最頂層的viewModel調用創建了一個視圖模型——在我的例子中是在TestScreen中。 所有調用同一類的viewModel的孩子都將獲得相同的對象。 例外情況是 Compose Navigation 的不同目的地,請參閱如何在此答案中處理這種情況。

您可以更新視圖模型的可變狀態屬性,它將反映在使用該模型的所有視圖上。 在 Compose 中查看有關狀態的更多信息。

視圖模型生命周期綁定到 compose 導航路由(如果有)或Activity / Fragment否則,取決於從哪里調用setContent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM