Android Jetpack编写muableStateListOf不进行重组 [英] Android Jetpack Compose mutableStateListOf not doing Recomposition
本文介绍了Android Jetpack编写muableStateListOf不进行重组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
因此,我在viewModel
中有一个mutableStateListOf
:
var childTravellersList = mutableStateListOf<TravellersDetails>()
TravellersDetails
是具有名为error
的字段的数据类。
这个childTravellersList
在用户界面中的用法是:
val list = remember{viewModel.childTravellersList}
LazyColumn(state = lazyColumnState) {
itemsIndexed(list) { index, item ->
SomeBox(show = if(item.error) true else false)
}
}
我已经在viewModel
中编写了一个函数,更新error
中给定的index
处的TravellersDetailsAs:
fun update(index){
childTravellersList[index].error = true
}
因此,每当我调用此函数时,列表都应该更新。
这会更新列表,但不会触发😕进行UI重组。 我哪里做错了?
推荐答案
mutableStateListOf
只能通知添加/删除/替换列表中的某些元素。当您更改列表中的任何类时,可变状态不能知道它。
数据类非常适合在单向数据流中存储不可变状态,因为当您看到需要将新数据传递给视图或可变状态时,您总是可以使用copy
更改它。因此避免将var
变量与数据类一起使用,始终将它们声明为val
以防止此类错误。
var childTravellersList = mutableStateListOf<TravellersDetails>()
fun update(index){
childTravellersList[index] = childTravellersList[index].copy(error = true)
}
另一个问题是您正在使用val list = remember{viewModel.childTravellersList}
:它保存第一个列表值并防止将来进行更新。通过ViewModel,您可以直接使用它itemsIndexed(viewModel.childTravellersList)
这篇关于Android Jetpack编写muableStateListOf不进行重组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文