Sep*_*hah 6 android kotlin data-class recompose android-jetpack-compose
在 Jetpack Compose 中,我们看到所有内置可组合项都具有扁平化输入,这是有意的吗?或者用数据类包装太多的输入(这是良好且干净的做法)具有相同的性能?
考虑这个样本
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
Run Code Online (Sandbox Code Playgroud)
在性能(重组)中将输入作为数据类或扁平输入发送会更好吗?或者有相同的结果?
换句话说,当我们将一个数据类发送给可组合函数时,我们只更改其中的一个成员,是否会导致整个函数重新组合?或者重组方面,它与使用扁平输入时具有相同的性能吗?
预先感谢您的帮助。
我认为选择其中之一对性能的影响很小。我认为 Compose 开发人员只是不认为数据类作为参数是最佳路线,我同意。
我不明白这是怎么回事:
data class SettingsItemEntity(
val title: String,
val description: String? = null,
@DrawableRes val imageResId: Int? = null,
val isChecked: Boolean? = null,
val showDivider: Boolean = true,
val onItemClicked: () -> Unit = {},
val onCheckedChange: (isChecked: Boolean) -> Unit = {},
val buttonLabel: String? = null,
val onButtonClicked: () -> Unit = {},
)
@Composable
fun SettingsItem(
entity: SettingsItemEntity,
modifier: Modifier = Modifier
) {
...
}
Run Code Online (Sandbox Code Playgroud)
比这个更好:
@Composable
fun SettingsItem(
title: String,
description: String? = null,
@DrawableRes imageResId: Int? = null,
isChecked: Boolean? = null,
showDivider: Boolean = true,
onItemClicked: () -> Unit = {},
onCheckedChange: (isChecked: Boolean) -> Unit = {},
buttonLabel: String? = null,
onButtonClicked: () -> Unit = {},
modifier: Modifier = Modifier
) {
...
}
Run Code Online (Sandbox Code Playgroud)
在与带有大量参数的 compose 函数的每次交互中都涉及一个数据类,只会给代码增加不必要的复杂性。它为阅读文档、调用函数和整体理解代码库增加了更多障碍,其唯一好处是函数声明括号内的代码较少(但其他地方的代码较多)。
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |