mutableStateOf 和 mutableStateListOf 有什么区别?

Ben*_*Tec 6 kotlin kotlin-android-extensions android-jetpack-compose

在使用存储在其中的 aViewModel和 a时List,我通常遵循以下方法:

var characteristics by mutableStateOf(listOf<Characteristic>())
Run Code Online (Sandbox Code Playgroud)

然后,我可以将数据分配给列表或修改它,并且 UI 将正确重构:

characteristics = issuesRepository.getCharacteristics()
characteristics = characteristics.plus(newCharacteristic)
Run Code Online (Sandbox Code Playgroud)

然而,我最近偶然发现了几种包含关键字 的方法mutableStateListOf(),然后将 List 分成两个单独的变量似乎是一种常见的做法,如下所示:

private val _characteristic = mutableStateListOf<Characteristic>()
val characteristic: List<Characteristic> = _characteristic
Run Code Online (Sandbox Code Playgroud)

这些方法有何不同,其中一种被认为是最佳实践还是一种更清洁的方法?

ngl*_*ber 16

使用mutableStateOf您正在创建一个可观察的对象。因此,只要将新实例分配给此状态,就会发生重组。假设您希望在将新项目添加到列表后进行重组。在这种情况下,您需要创建此列表的副本,将 elemento 添加到此复制的列表中,然后将复制的列表分配给状态。

创建mutableStateListOf一个可观察列表。您在此列表中执行的所有操作(添加、删除、更新)都将导致重组。

  • 动机是封装。由于“_characteristics”(开头的“_”只是一种约定)是私有的,因此只能从具有此属性的类内部进行更改,其他类无法更改它。要公开此字段,您应该使用“characteristics”(特别是,我会使用“State&lt;List&lt;String&gt;&gt;”而不是“List&lt;String&gt;”)并在任何您想要的地方使用它。 (2认同)