如果我正确理解文档的话,如果rememberUpdatedState没有改变,则LaunchedEffect不应再次运行。但是,如果我运行下面这样的代码,它并不能按照预期工作,并且该值在旋转时被更新。
如果没有LaunchedEffect,在配置更改时会记住rememberSaveable,并且输入中的文本是正确的(如果我键入任何内容,输入中仍然有)。这使我相信rememberUpdatedState也不应该改变,但它却被触发了。为什么?
我做错了什么或者这是一个bug?还有其他更好的方法吗?
谢谢 :)
如果没有LaunchedEffect,在配置更改时会记住rememberSaveable,并且输入中的文本是正确的(如果我键入任何内容,输入中仍然有)。这使我相信rememberUpdatedState也不应该改变,但它却被触发了。为什么?
我做错了什么或者这是一个bug?还有其他更好的方法吗?
谢谢 :)
@Composable
fun ThingView(
thingViewModel: ThingViewModel,
id: String?
) {
var thingName by rememberSaveable { mutableStateOf("") }
val scope = rememberCoroutineScope()
LaunchedEffect(rememberUpdatedState(newValue = thingName)) {
scope.launch {
id?.let {
val thing = thingViewModel.getThing(id)
thingName = thing.name
}
}
}
OutlinedTextField(
value = thingName,
onValueChange = { thingName = it },
label = { Text("Name") }
)
}
编辑:
澄清一下,目标是允许用户在文本框中输入文本并在旋转时不清除该文本。对于用户来说,这将非常令人恼火,可能不符合他们的期望。