gpt4 book ai didi

kotlin - 在可组合函数之外更新状态。 (喷气背包组合)

转载 作者:行者123 更新时间:2023-12-04 13:27:56 26 4
gpt4 key购买 nike

我正在尝试使用 Jetpack compose 实现 redux。场景如下所示:
我有一个 ListView ,我需要在可组合函数中显示数据。

    @Composable
fun CreateListView(text: String) {
val listdata = state { store.state }

LazyColumn {
//some listview code here
}
}
上面,我想使用我从 redux store 得到的数据。但商店。订阅方法是独立的,并且在可组合之外。在那里,虽然我能够通过新数据更新状态,但更改没有反射(reflect)回可组合 ListView :
    // activity page outside composable
private fun storeSubscription(){
viewModel.storeSubscription = store.subscribe {

when (store.state) {
store.state = // list data from some source
}
}
}
是否可以像上面一样从函数外部更新可组合项,而无需发送任何参数?由于 redux 商店是一个全局性的商店,所以我认为它应该可以工作。

最佳答案

尝试类似的东西,

@Composable
fun <T> Store<T>.asState(): State<T> {
val result = remember { mutableStateOf(store.state) }
DisposableEffect {
val unsubscribe = store.subscribe {
result.value = store.state
}
onDispose { unsubscribe() }
}
return result
}

@Composable
fun CreateListView(text: String) {
val listdata by store.asState()

LazyColumn {
//some listview code here
}
}

确切的代码可能会有所不同,因为我不知道您使用的是什么 redux 实现。
这将创建一个可观察的状态对象,每当 lambda 传递给 subscribe 时,该对象将被更新。叫做。此外,它会在 CreateListView 时自动退订。不再是组合的一部分。

关于kotlin - 在可组合函数之外更新状态。 (喷气背包组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67031422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com