我正在尝试使用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存储是一个全局存储,所以我认为它应该工作。
4条答案
按热度按时间ou6hu8tu1#
您可以在可组合函数之外使用MutableLiveData。在可组合函数中使用observeAsState(),以便在数据更改时重新组合。
webghufk2#
你可以这样说,
确切的代码可能会有所不同,因为我不知道你使用的是什么redux实现。
这创建了一个可观察的状态对象,当传递给
subscribe
的lambda被调用时,它将被更新。同样,当CreateListView
不再是组合的一部分时,它将自动取消订阅。jjjwad0x3#
您必须遵循状态托管模式From Android Domcumentaiton
关键词:状态提升是一种将状态向上移动以使组件无状态的模式。
当应用于可组合对象时,这通常意味着向可组合对象引入两个参数:
value:T:要显示的当前值。onValueChange:(T)-〉单位:请求更改值的事件,其中T是建议的新值。
所以在你的例子中,你将把状态保存在需要访问它的上层Composable中,并传递状态的值和一个lambda函数,以将其更改为另一个Composable,你可以从官方文档中了解更多信息。
wlp8pajw4#
您可以像这样简单地使用lambda:
(An示例来自我正在开发的应用程序。)
主要组成: