reactjs 点击“取消”按钮时跳过React-Final-Form上的验证

k4aesqcs  于 2022-12-12  发布在  React
关注(0)|答案(2)|浏览(147)

我有一个React-Final-Form来验证它的表单字段。
我希望在单击取消或重置按钮时调用验证。但是,如果单击取消按钮导致无效字段显示错误消息,则永远不会调用 *onCancel函数 *。即使我将按钮类型设置为“重置”,也会发生这种情况。
如果validate没有返回更改,则只有在这样的情况下才能到达 onCancel 函数。

handleSubmit(values) { console.log(JSON.stringify(values, 0, 2)) }

  onCancel() { console.log("cancelled!"); }

  render() {
    const onSubmit = async values => { this.handleSubmit(values); };

   return (
     <Form name="form" 
        onSubmit={onSubmit}
        validate={values => {
                  const errors = {};
                  if (!values.username) { errors.username = 'Required' }
                  return errors }}

        render={({handleSubmit}) => (
          <form onSubmit={handleSubmit}>
            <Field name="username">
              {({ input, meta }) => (
                 <input {...input} type="text" placeholder="Username" autoFocus>
                 {meta.error && meta.touched && <span>{meta.error}/span>}                   
              )}
            </Field>

            <button type="submit">Submit</button>
            <button type="button" onClick={onCancel}>Cancel</button>
          </form>
        )}/>
  );
8fsztsew

8fsztsew1#

显示错误是因为单击“取消”按钮模糊了字段,导致meta.touched变为true。这不是“调用验证”,错误已计算。
对我来说,onCancel没有被调用是没有意义的。当我运行这段代码时,它似乎确实被调用了。

如果你想用Cancel来重置表单,你需要调用form.reset(),就像this example一样。
如果您不想显示错误并 * 不 * 重置表单,则需要自己管理该状态。

x8diyxa7

x8diyxa72#

我只是花了几个小时试图调试一个类似的问题。结果我只需要更新我的样式:

  • 最终形式在Blur上运行验证
  • onBlur发生在onClick之前,因此当您单击按钮时-首先会发生blur事件,然后应该会发生click事件(但从未发生click事件)
  • 在onBlur期间,会呈现验证消息,导致按钮向下移动。
  • 然后点击发生了,但它没有点击按钮,因为按钮移动了

相关问题