不更新可变状态列表<String>()



我试图在compose中从mutableStateList()中更新(添加或删除主题),但数据没有更新,

我想要的是我想要基于我想要做api调用的主题。

让我给你看看我做了什么

val searchedTopicList = remember {
mutableStateListOf<String>()
}
Log.i("Topics", "DashboardPersonalScreen: $searchedTopicList")
LaunchedEffect(searchedTopicList) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}
Button(onClick ={
searchedTopicList.add("cars")
}){
Text("Add Topic")
}

当我点击按钮时,数据没有更新,这就是api没有调用的原因。

如果我错了,请纠正我

最后我发现了我犯的错误,

我更改了的代码

LaunchedEffect(searchedTopicList) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}

LaunchedEffect(searchedTopicList.size) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}

因此,每当searchedTopicList大小改变时,LaunchedEffect再次触发并进行API调用。

对于log,我添加了size,然后日志显示

如果有人想参加一些关于它的活动,那么这将是一个很棒的

如果您需要处理在不更改列表大小的情况下更改列表的操作,那么您的答案将不起作用。如下图所示。


val searchedTopicList = remember {
mutableStateListOf<String>()
}
Log.i("Topics", "DashboardPersonalScreen: $searchedTopicList")
LaunchedEffect(searchedTopicList.size) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}
Button(onClick ={
if (searchedTopicList.isEmpty()) {
searchedTopicList.add("cars")  
} else {
searchedTopicList[searchedTopicList.lastIndex] = UUID().toString()
}
}){
Text("Add Topic")
}

因为组成只观察列表的CCD_ 5而不观察CCD_。

您的代码需要从更改

LaunchedEffect(searchedTopicList.size) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}

到下面的一个。

  1. snapShotFlow创建readObserver,收集身体内部观察到的状态变化并将其作为Flow发出。CCD_ 9实际上是从其CCD_。从collectLastest收集的每个事件都将取消以前的newsViewModel.getNewsFromTopics,并在可能的情况下启动新的事件
LaunchedEffect(searchedTopicList) {
snapShotFlow{ searchedTopicList.toList() }.collectLastest {
newsViewModel.getNewsFromTopics(it)      
}
}
  1. 直接读取状态并将其作为密钥传递
LaunchedEffect(searchedTopicList.toList()) {
newsViewModel.getNewsFromTopics(searchedTopicList)
}

相关内容

  • 没有找到相关文章

最新更新