本文介绍了在Composable函数外部更新State。(喷气背包组合)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试用Jetpack Compose实现redux。场景如下:
我有一个列表视图,需要在其中显示可组合函数中的数据。
@Composable
fun CreateListView(text: String) {
val listdata = state { store.state }
LazyColumn {
//some listview code here
}
}
上面,我想使用我从Redux商店获得的数据。但那家店。订阅方法是独立的,并且在可组合的外部。其中,虽然我能够通过新数据更新状态,但更改不会反映回可组合的列表视图:
// 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实现。
这将创建一个可观察的状态对象,每当调用传递给subscribe
的lambda时,该对象将被更新。此外,当CreateListView
不再是合成的一部分时,它将自动取消订阅。 这篇关于在Composable函数外部更新State。(喷气背包组合)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!