我正在通过文章学习 Compose 。
无状态可组合项是不保留任何状态的可组合项。实现无状态的一个简单方法是使用状态提升,所以我用代码 A 替换代码 B,这太棒了!
文章告诉我:
通过将状态从 HelloContent 中提升出来,可以更轻松地推理可组合项、在不同情况下重用它并进行测试。HelloContent 与其状态的存储方式分离。解耦意味着如果修改或替换HelloScreen,则不必更改HelloContent的实现方式。
name所以我写了Code C,它存储了a中的值SharedPreferences,我认为Code C就像Code A一样,但实际上,我无法用Code C输入任何字母,Code C有什么问题吗?
代码A
@Composable
fun HelloScreen() {
var name by rememberSaveable { mutableStateOf("") }
HelloContent(name = name, onNameChange = { name = it })
}
@Composable
fun HelloContent(name: String, onNameChange: (String) -> Unit) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = "Hello, $name",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
OutlinedTextField(
value = name,
onValueChange = onNameChange, …Run Code Online (Sandbox Code Playgroud)