【问题标题】:How to re-trigger validations manually in ReduxForm?如何在 Redux Form 中手动重新触发验证?
【发布时间】:2016-11-30 10:58:08
【问题描述】:

我喜欢在表单安装后重新触发验证。假设我喜欢在每次单击名为“验证输入”的按钮时运行验证。

如何做到这一点?

相关问题:

【问题讨论】:

    标签: redux-form


    【解决方案1】:

    手动redux-form验证是oftrequestedfeature,目前似乎没有提供。

    我个人的解决方法是在reduxForm-wrapped 组件中触发this.props.change('_validationHack', Date.now()),然后在将values 发送到服务器之前,在onSubmit 方法中删除values._validationHack

    它并不漂亮,但似乎毫无例外地工作。

    【讨论】:

      【解决方案2】:

      同步验证在每次渲染时运行,因此“触发它”并没有太大意义。

      如果您想使用异步验证,可以调用 this.props.asyncValidate() 函数来触发它。

      或者,如果您更喜欢提交验证,您可以只提交表单。

      【讨论】:

      • 谢谢,@Erik。我没有考虑使用提交。 this.props.onSubmit() 会工作吗?还是应该将 formValues 作为参数传递?
      • 实例 API 中的 submit() 方法似乎也可用。我会先尝试一下,然后再报告。
      • 更正:同步验证不是在每个渲染上运行 - 所以这个问题非常有意义。
      • this.props.asyncValidate() 什么也没做
      【解决方案3】:

      根据 2018 年 11 月 28 日:

      https://redux-form.com/6.2.1/docs/api/actioncreators.md/

      您可以分派一些操作来更改表单并触发验证方法。

      如果您触发更改/触摸操作,它应该执行验证功能。

      【讨论】:

      • changeblurtouch 在我的情况下都不会触发异步验证。也许它被asyncBlurFields 破坏了?
      • 谢谢。由于我的组件设置为仅在字段无效并且已被“触摸”时才提供错误/警告,因此使用需要验证的字段手动触发触摸动作创建者正是我想要的。
      【解决方案4】:

      这对我有用:

      import { touch, stopAsyncValidation } from 'redux-form';
      //...
          yield put(stopAsyncValidation('CallForm', { mdn: mdn.error_message }));
          yield put(touch('CallForm', 'mdn'));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-26
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        相关资源
        最近更新 更多