react-final-form 中的自定义输入验证

问题描述

我已经设置了一个自定义TimePicker 组件,我想将其连接到 react-final-form

表格

<Form
  onSubmit={onSubmit}
  render={({ handleSubmit,form,submitting,pristine }) => (
    <form onSubmit={handleSubmit}>
      <Field
        id="time"
        name="time"
        label="Time"
        component={TimePicker.Adapter}
      />
      <Button
        disabled={submitting || pristine}
        color="primary"
        variant="contained"
        type="submit"
      >
        Submit
      </Button>
    </form>
  )}
/>

时间选择

// Adapter for https://final-form.org/
const TimePickerAdapter = ({ input,Meta,...rest }) => (
  <TimePicker
    {...input}
    {...rest}
    value={input.value === '' ? null : input.value}
    onChange={value => input.onChange(value)}
    error={(Meta.error || Meta.submitError) && Meta.touched}
    errorText={Meta.touched ? Meta.error || Meta.submitError : ''}
  />
);

// TimePicker implementation goes here..
function TimePicker(props) { ... }

TimePicker.Adapter = TimePickerAdapter;
export default TimePicker;

对于外部 Field-Level-Validation,我会将 validate prop 添加<Field />。例如:

const required = value => (value ? undefined : 'required')

<Field
  id="time"
  name="time"
  label="Time"
  validate={required}
  component={TimePicker.Adapter}
/>

但我需要一个内部验证来传递给 <Form />。例如,TimePicker一个 input,它期望像 1000 (=> 10:00) 这样的值但是有一个9999 这样的输入显然不是一个有效的输入,因为最长可用时间为 2359

我想在自定义输入组件/适配器中触发表单错误。有没有办法执行此操作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...