TButton(text = "reset with values") { formInstance.resetFields( "name" to "Junerver", "age" to 5, "mobile" to "13566667777", "email" to "composehook@gmail.com" ) }
监听表单项变化
你可以使用Form.useWatch来监听表单项的变化,并将它的值作为一个 State 状态:
1 2 3 4 5
val form = Form.useForm() val name by Form.useWatch<String>(fieldName = "name", formInstance = form)
// 在UI中使用 Text(text = "Current name: $name")
获取表单验证状态
你可以使用_isValidated()方法获取表单的验证状态:
1 2 3 4
val canSubmit by form._isValidated() TButton(text = "submit", enabled = canSubmit) { // 提交表单 }
在子组件中获取表单实例
当组件位于 Form 作用域下时,在子组件中可以通过 Form.useFormInstance() 获取表单实例
1
val formInstance: FormInstance = Form.useFormInstance()
@Composable funUseFormExample() { val form = Form.useForm() useMount { form.setFieldsValue( "name" to "default", "mobile" to "111" ) } // 通过 Form.useWatch 可以监听表单项的内容到一个 State val name by Form.useWatch<String>(fieldName = "name", formInstance = form)
Surface { ScrollColumn { Form(form) { FormItem<String>(name = "name") { (state, validate, msgs) -> var string by state ItemRow(title = "name") { OutlinedTextField(value = string ?: "", onValueChange = { string = it }) } } Spacer(modifier = Modifier.height(18.dp))
FormItem<Int>(name = "age", Required()) { (state, validate, msgs) -> var age by state ItemRow(title = "* age") { Row { TButton(text = "1", enabled = age != 1) { // 通过 setFieldValue 可以为表单项设置值 form.setFieldValue("age" to 1) } TButton(text = "3", enabled = age != 3) { form.setFieldValue("age" to 3) } TButton(text = "5", enabled = age != 5) { form.setFieldValue("age" to 5) } TButton(text = "null", enabled = age != null) { form.setFieldValue("age" to null) } Text(text = "$validate${msgs.joinToString("、")}") } } }
// 更多表单项...
// 提交按钮 Sub() } Text(text = "by use `Form.useWatch(fieldName,formInstance)`can watch a field\nname: $name") } } }
@Composable privatefun FormScope.Sub() { // 你可以在子组件中使用 Form.useFormInstance() 获取父组件中的 FormInstance val formInstance: FormInstance = Form.useFormInstance() // 获得表单是否校验成功的 **状态** val canSubmit by formInstance._isValidated() Row { TButton(text = "submit", enabled = canSubmit) { println( formInstance .getAllFields() .toString() + "\nisValidated :" + formInstance.isValidated() ) } TButton(text = "reset") { formInstance.resetFields() } TButton(text = "reset with values") { formInstance.resetFields( "name" to "Junerver", "age" to 5, "mobile" to "13566667777", "email" to "composehook@gmail.com" ) } } }