在Composable函数外部更新State。(喷气背包组合) [英] Update State outside the composable function. (Jetpack compose)

查看:18
本文介绍了在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。(喷气背包组合)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆