Bha*_*mar 10 kotlin redux android-jetpack-compose android-jetpack-compose-list
我正在尝试使用 Jetpack compose 来实现 redux。场景如下:
我有一个列表视图,需要在可组合函数中显示数据。
@Composable
fun CreateListView(text: String) {
val listdata = state { store.state }
LazyColumn {
//some listview code here
}
}
Run Code Online (Sandbox Code Playgroud)
上面,我想使用从 redux 存储中获取的数据。但商店。订阅方法是独立的,位于可组合项之外。其中,虽然我能够通过新数据更新状态,但更改不会反映回可组合列表视图:
// activity page outside composable
private fun storeSubscription(){
viewModel.storeSubscription = store.subscribe {
when (store.state) {
store.state = // list data from some source
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以像上面那样从函数外部更新可组合项,而不发送任何参数?由于 redux 商店是全球性的,所以我认为它应该可以工作。
您可以在可组合函数之外使用 MutableLiveData。在可组合项中使用observeAsState() 在数据更改时进行重组。
private val myLive = MutableLiveData<String>()
fun nonComposableScope(){
myLive.postValue("hello")
}
@Composable
fun MyScreen(textLive:LiveData<String>){
val text: String? by textLive.observeAsState()
// use text here
}
Run Code Online (Sandbox Code Playgroud)
尝试类似的事情,
@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
}
}
Run Code Online (Sandbox Code Playgroud)
确切的代码可能会有所不同,因为我不知道您正在使用什么 redux 实现。
这将创建一个可观察的状态对象,每当调用传递给的 lambda 时该对象都会更新subscribe。CreateListView此外,当不再是作品的一部分时,它将自动取消订阅。
| 归档时间: |
|
| 查看次数: |
10531 次 |
| 最近记录: |