作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 TextField 可重用组件,所以我这样做了
@Composable
fun TextFieldComponent(state: Any, placeholder: String) {
TextField(
value = state,
onValueChange = { textFieldValue -> state = textFieldValue },
placeholder = { Text(placeholder, color = MaterialTheme.colors.secondary) }
)
}
但我遇到了这些错误
这就是我调用组件的方式
val textFieldState by rememberSaveable { mutableStateOf("") }
TextFieldComponent(state = textFieldState, placeholder = "Email")
那么有什么解决办法吗?
最佳答案
只需转state
进入MutableState<String>
, 所以你可以从函数内部修改它:
@Composable
fun TextFieldComponent(state: MutableState<String>, placeholder: String) {
TextField(
value = state.value,
onValueChange = { textFieldValue -> state.value = textFieldValue },
placeholder = { Text(placeholder, color = MaterialTheme.colors.secondary) }
)
}
但是,通常更可取的是为可组合函数提供一个值和一个更改监听器:
@Composable
fun TextFieldComponent2(value: String, onValueChange: (String) -> Unit, placeholder: String) {
TextField(
value = value,
onValueChange = { textFieldValue -> onValueChange(textFieldValue) },
placeholder = { Text(placeholder, color = MaterialTheme.colors.secondary) }
)
}
这样的解决方案更灵活,因为调用者可以很容易地提供值变化的任何行为(感谢@Jakoss)
关于android - 如何在 Jetpack Compose 中制作可重用的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69885391/
我是一名优秀的程序员,十分优秀!