Android Jetpack编写muableStateListOf不进行重组 [英] Android Jetpack Compose mutableStateListOf not doing Recomposition

查看:12
本文介绍了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屋!

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