代码A来自这里的官方示例代码。
val (currentSection, updateSection) = rememberSaveable { mutableStateOf(tabContent.first().section) }
是一个解构声明。
显然currentSection
是由tabContent.first().section
赋值的
赋给变量updateSection
的是什么?是否由tabContent.first().content
分配?
代码
@Composable
fun InterestsRoute(
...
) {
val tabContent = rememberTabContent(interestsViewModel)
val (currentSection, updateSection) = rememberSaveable {
mutableStateOf(tabContent.first().section)
}
...
}
@Composable
fun rememberTabContent(interestsViewModel: InterestsViewModel): List<TabContent> {
val uiState by interestsViewModel.uiState.collectAsState()
val topicsSection = TabContent(Sections.Topics) {
val selectedTopics by interestsViewModel.selectedTopics.collectAsState()
TabWithSections(
sections = uiState.topics,
selectedTopics = selectedTopics,
onTopicSelect = { interestsViewModel.toggleTopicSelection(it) }
)
}
...
return listOf(topicsSection, peopleSection, publicationSection)
}
enum class Sections(@StringRes val titleResId: Int) {
Topics(R.string.interests_section_topics),
People(R.string.interests_section_people),
Publications(R.string.interests_section_publications)
}
class TabContent(val section: Sections, val content: @Composable () -> Unit)
updateSection
是一个lambda,用于更新可变状态的值。考虑这个例子:
@Composable
fun MyButton() {
val (count, updateCount) = remember { mutableStateOf(0) }
Button(
onClick = { updateCount(count+1) }
) {
Text(text = "$count")
}
}
此处count为Int
, updateCount为(Int) -> Unit
。updateCount接受一个Int
,并将MutableState (count
)的值更新为提供的值(这里是count+1
)。以上代码在每次单击按钮时更新计数文本1。
回到你的代码,rememberSaveable { mutableStateOf (...) }
创建一个新的MutableState。初始值为tabContent.first().section
。currentSection
存储这个MutableState的值(最初是tabContent.first().section
)。现在,如果您想要更新这个MutableState的值,您可以使用updateSection
lambda。只要用新值调用lambda,currentSection
就会自动更新。