首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

react-final- form :使用表单更改返回的数据更新验证规则和重新验证字段

基础概念

react-final-form 是一个用于 React 的表单管理库,它提供了一种简单的方式来处理表单的状态和验证。该库的核心理念是将表单状态提升到组件外部,使得表单逻辑更容易测试和复用。

相关优势

  1. 声明式验证:通过配置验证规则,可以轻松实现表单字段的验证。
  2. 易于集成:可以与其他 React 库和自定义组件无缝集成。
  3. 性能优化:只在必要时重新渲染表单,提高应用性能。
  4. 灵活的表单控件:支持自定义表单控件和复杂的表单布局。

类型

react-final-form 提供了多种类型的表单控件,包括但不限于:

  • 文本输入框
  • 选择框
  • 复选框
  • 单选按钮
  • 下拉菜单

应用场景

适用于需要复杂表单逻辑的任何 React 应用,例如:

  • 用户注册和登录表单
  • 数据编辑和提交表单
  • 配置设置表单

更新验证规则和重新验证字段

在使用 react-final-form 时,如果你需要在表单数据更改后更新验证规则并重新验证字段,可以通过以下步骤实现:

  1. 定义验证规则:首先,你需要定义表单字段的验证规则。
代码语言:txt
复制
const validate = values => {
  const errors = {};
  if (!values.firstName) {
    errors.firstName = 'Required';
  }
  // 其他验证规则...
  return errors;
};
  1. 创建表单:使用 Form 组件创建表单,并传入验证函数。
代码语言:txt
复制
import { Form, Field } from 'react-final-form';

const MyForm = () => (
  <Form
    onSubmit={onSubmit}
    validate={validate}
    render={({ handleSubmit, form, submitting, pristine, invalid }) => (
      <form onSubmit={handleSubmit}>
        <Field name="firstName">
          {({ input, meta }) => (
            <div>
              <label>First Name</label>
              <input {...input} type="text" placeholder="First Name" />
              {meta.touched && meta.error && <span>{meta.error}</span>}
            </div>
          )}
        </Field>
        {/* 其他字段... */}
        <button type="submit" disabled={submitting || pristine || invalid}>Submit</button>
      </form>
    )}
  />
);
  1. 动态更新验证规则:如果需要在表单数据更改后动态更新验证规则,可以在 onValuesChange 回调函数中进行处理。
代码语言:txt
复制
const onValuesChange = (changedValues, allValues) => {
  // 根据 changedValues 或 allValues 更新验证规则
  if (allValues.someField === 'someValue') {
    // 更新验证规则
  }
};
  1. 重新验证字段react-final-form 会在表单数据更改时自动重新验证字段,但你也可以通过调用 form.mutators 中的方法手动触发验证。
代码语言:txt
复制
const onSubmit = async values => {
  // 提交表单数据
  try {
    await submitForm(values);
  } catch (error) {
    // 处理提交错误
  }
};

示例代码

以下是一个完整的示例代码,展示了如何在 react-final-form 中动态更新验证规则并重新验证字段:

代码语言:txt
复制
import React from 'react';
import { Form, Field } from 'react-final-form';

const validate = values => {
  const errors = {};
  if (!values.firstName) {
    errors.firstName = 'Required';
  }
  // 其他验证规则...
  return errors;
};

const onValuesChange = (changedValues, allValues) => {
  // 根据 changedValues 或 allValues 更新验证规则
  if (allValues.someField === 'someValue') {
    // 更新验证规则
  }
};

const onSubmit = async values => {
  // 提交表单数据
  try {
    await submitForm(values);
  } catch (error) {
    // 处理提交错误
  }
};

const MyForm = () => (
  <Form
    onSubmit={onSubmit}
    validate={validate}
    onValuesChange={onValuesChange}
    render={({ handleSubmit, form, submitting, pristine, invalid }) => (
      <form onSubmit={handleSubmit}>
        <Field name="firstName">
          {({ input, meta }) => (
            <div>
              <label>First Name</label>
              <input {...input} type="text" placeholder="First.js" />
              {meta.touched && meta.error && <span>{meta.error}</span>}
            </div>
          )}
        </Field>
        {/* 其他字段... */}
        <button type="submit" disabled={submitting || pristine || invalid}>Submit</button>
      </form>
    )}
  />
);

export default MyForm;

参考链接

通过以上步骤和示例代码,你可以在 react-final-form 中实现动态更新验证规则并重新验证字段的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django教程(三)- Django表单Form1.Form 基本使用2.Form中字段及插件3.通过Django表单Form来完成需求4.自定义验证验证规则

1.Form 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 2.Form中字段及插件...创建Form类时,主要涉及到 【字段】 和 【插件】,字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: Field: required=True,...{% widthratio 5 100 1 %} 上面的代码表示:5/100*1,返回0.05,只需要将第三个参数设置为1即可 ---- 3.通过Django表单Form来完成需求 1.根据用户填写表单的不同跳往不同的页面...(): # obj.is_valid()返回一个bool值,如果检查通过返回True,否则返回False values = obj.clean() # 拿到处理后的所有数据,...在网页上打印1-100之间的偶数 4.自定义验证验证规则 方式1:在字段中自定义validators设计正则匹配 from django.forms import Form from django.forms

10.2K40

bootstrapValidator 中文API

在提交表单时也不会执行任何验证。当您要在自定义提交处理程序中提交表单时,可能会使用它。 破坏 destroy() - 破坏插件。 它将删除所有错误消息,反馈图标以及关闭插件创建的事件。...参数 类型 描述 field 字符串| jQuery的 字段名称或字段元素如果未定义字段,则该方法返回表单选项。 validator 串 验证器的名称如果未定义验证器,则该方法返回所有字段选项。...它隐藏所有错误元素和反馈图标。所有的字段都被标记为未被验证。 参数 类型 描述 resetFormData 布尔 如果true,该方法重置具有验证器规则的字段。...当您需要重新验证其值由其他插件更新的字段时使用它。 默认情况下,一旦该字段已经被验证并被标记为有效的插件,该插件就不会重新验证该字段。当与其他插件一起使用时,字段值被更改,因此需要重新验证。...如果null,该方法更新所有验证器的有效性结果 验证 validate(): BootstrapValidator - 手动验证表单。

13.2K50
  • 在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。...'); } 在该方法中,第一个参数是用户请求实例,第二个参数是以数组形式定义的请求字段验证规则,关于所有字段验证规则及其说明你可以在验证规则文档中查看,这里我们定义 title 字段是必填的,格式是字符串...如果表单验证通过,则继续向下执行,如果表单验证不通过,会抛出 ValidationException 异常,具体怎么处理这个异常要看请求方式,如果是 Ajax 请求的话,将会返回包含错误信息的 JSON...响应(错误码为 422),如果是正常的 POST 表单请求的话,会重定向到表单提交页,并包含所有用户输入和错误信息,以便重新渲染已填写表单并显示错误信息。...> 这样,刷新表单页面后,提交数据,验证失败的情况下,就可以回显用户上次输入数据和验证错误信息了: ?

    5.8K10

    最熟悉的陌生人 rc-form

    要想实现表单数据的实时更新需要在表单 onChange 的时候手动更新 state 状态; 从上面代码中可以看出,这样写功能也能实现,但是当我们的表单多的时候,难道页面要写十几个 onChange 事件去实现页面的数据驱动视图的更新吗...Demo 只是简单的基于 rc-form 实现了表单的装饰、表单验证、数据收集等功能。那么如何实现更加具有针对性的,适用多种业务场景的表单组件呢?...到此,我们简单的描述了整个流程。 表单数据双向绑定 表单数据更新大致流程如下: ?...如果我们没有配置 validateRules 以及 validateTriggers 等规则,那就使用 onCollect 方法收集最新的数据并更新到 fieldsStore 中。...总结: 总之 rc-form 内部有自己的状态管理,fieldsStore 记录着所有表单项的信息,通过 getFieldDecorator 和表单进行双向绑定; 真正的区别在于用不用表单规则验证,不用就

    1.1K20

    浅谈表单受控性及结合Hooks应用

    使用场景: 需要对用户输入进行验证和处理的表单 需要实时反映用户输入的值的表单 需要根据表单元素的值动态地改变其他组件的状态或行为等情况时会使用到受控表单 示例代码: import React, { useState...不需要处理 state 的变化,可以减少代码量。 使用场景: 对于简单的表单,不需要对用户输入进行验证和处理。 需要获取表单元素的值进行一些简单的操作,如发送请求或更改 URL 等。...对于简单的表单,可以更快地实现功能。 dom更新性能 频繁的 setState 触发视图的重新渲染可能会导致性能问题。...不同于 rc-field-form 中使用的受控表单来做表单状态管理,react-hook-form 使用了 React 的 useRef 和 useReducer 来处理表单数据的状态,而不是使用... 可以看到 register 返回里并没有 value 字段,那么这个表单控件的值并不受控,state 只存于控件内部,对控件的更新也只会影响自身的更新。

    35610

    【工具】15个非常实用的 JavaScript 表单验证库

    它使用近40种高效的数据验证伪类型为JavaScript提供简洁,高性能,可读性,数据和类型验证。...它提供了验证转换和序列化信息的功能,以及将实时验证行为分配给表单字段的功能。它可以与任何JavaScript框架一起使用 ,但是有一个可与jQuery一起使用的插件。 ?...13、Form Validation Made Easy 表单验证-简单易用的脚本使您可以非常轻松地设置验证规则,并针对来自任何类型的数组数据源(例如$ _POST,$ _ GET或键/值填充数组)的任何输入来验证这些规则...该脚本还可以处理输入字段,文本区域,复选框,单选按钮和选择列表的输入值填充(如果已指定默认值)以及何时将表单发布并返回给用户。这意味着当表单无效时,用户无需两次输入相同的信息!...该脚本附带了一堆预定义的规则,但是如何验证表单中的每个输入都由您决定。使用自定义功能,您可以连接脚本并提供自己的验证规则和错误消息。 ?

    6.2K20

    AngularDart4.0 指南- 表单 顶

    开发表单需要设计技巧(超出本页面的范围),以及双向数据绑定,更改跟踪,验证和错误处理的框架支持,您将在本页面上了解这些信息。 本页面向您展示了如何从头构建一个简单的表单。...您可以创造性地设计控件,将它们绑定到数据,指定验证规则和显示验证错误,有条件地启用或禁用特定控件,触发内置的视觉反馈等等。 Angular通过许多重复的,模板化的任务使处理过程变得简单。...创建一个模型 当用户输入表单数据时,您将捕获其更改并更新模型的实例。 直到你知道模型是什么样子,你才能布置表格。 一个模型可以像“钱包”一样简单,掌握关于应用程序重要事实的事实。...概要 Angular表单为数据修改,验证等提供支持。 在此页面中,您学习了如何使用以下功能: 一个HTML表单模板和一个带有@Component注解的表单组件类。...表单提交,通过ngSubmit事件绑定处理。 模板引用变量,如heroForm和name。 双向数据绑定([(ngModel)])。 用于验证和表单元素更改跟踪的NgControl 指令。

    17.5K30

    HTML 表单和约束验证的完整指南

    在本文中,我们将研究 HTML 表单字段和 HTML5 提供的验证选项。我们还将研究如何通过使用 CSS 和 JavaScript 来增强这些功能。 什么是约束验证? 每个表单域都有一个目的。...并为此经常管辖约束上或理事什么应该和不应该被输入到每个表单域的规则- 。...但首先,这里有一个重要的警告信息: 客户端验证是一项很好的功能,它可以在应用程序浪费时间和带宽将数据发送到服务器之前防止常见的数据输入错误。它不能替代服务器端验证! 始终清理服务器端的数据。...媒体捕捉输入法 checked 复选框/收音机被选中 disabled 禁用控件(它不会被验证或提交其值) form 与使用此 ID 的表单关联 formaction 提交和图像按钮上提交的 URL...同样,无效表单可能会突出显示无效字段。 现场验证 各个字段具有以下约束验证属性: willValidate:true如果元素是约束验证的候选元素,则返回。

    8.4K40

    37.Django1.11.6文档

    一个表单的字段本身就是类;他们管理表单数据,并在提交表单时执行验证。 DateField 和FileField 处理的数据类型差别很大,必须完成不同的事情。...字段数据 不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。...Form 实例的数据没有办法修改。 Form实例一旦创建,你应该将它的数据视为不可变的,无论它有没有数据。 (2)使用表单验证数据 让我们试下非法的数据。...记住 prefix 在POST请求和非POST 请求中均需设置,以便他能渲染和执行正确 (11)表单和字段验证 表单验证发生在数据验证之后。 ...使用验证器 Django 的表单(以及模型)字段支持使用简单的函数和类用于验证,它们叫做Validator。

    24.4K80

    Django学习笔记之Django Form表单详解

    so,两个突出优点:     1 form表单提交时,数据出现错误,返回的页面中仍可以保留之前输入的数据。    ...它还意味着当Django 收到浏览器发送过来的表单时,它将验证数据的长度。 Form 的实例具有一个is_valid() 方法,它为所有的字段运行验证的程序。...当调用这个方法时,如果所有的字段都包含合法的数据,它将: 返回True 将表单的数据放到cleaned_data属性中。...回到顶部 Django Form 类详解 绑定的和未绑定的表单实例 绑定的和未绑定的表单 之间的区别非常重要: 未绑定的表单没有关联的数据。当渲染给用户时,它将为空或包含默认的值。...字段的数据 不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。

    4.6K10

    vue10CRUD+表单验证

    表单数据和验证信息;        @close="dialogClose"  在数据表格中添加“编辑”“删除”功能连接。...="bookForm">form>设置表单元素属性双向绑定的对象属性名称  定义验证规则,及rule  调用验证 注1::rules="rules"表单验证定义,只需要通过...我们在rules这里写了对表单的验证规则,但是我们如何在methods里进行指定的表单进行认证,所以我们一开始就在el-form里写了 ref="ruleForm",我们在methods里就可以用...,再清空表单数据信息          //通过form表单的ref属性来清空表单验证信息        this....返回参数: 正确:说明返回的json数据 错误:指明不同错误的代码及含义 以上就是今天的分享!!!

    2.4K20

    Extjs form 组件

    1.根类 Ext.form.Basic 提供了,表单组件,字段管理,数据验证,表单提交,数据加载的功能 2.表单的容器 Ext.form.Panel 容器自动关联 Ext.form.Basic 的实例对象更方便的进行字段的配置...  文本框方式的 Ext.form.field.Trigger 触发器 Ext.form.field.Time  带有时间下拉框 和自动验证的input表单。...'//在字段的右面展示数据     重要的方法     Ext.form.field.ComboBox     控件支持自动完成、远程加载、和许多其他特性。...用Text Field的regex配置应用一个校验规则,和使用maskRe配置限制可输入的字符,这有一个使用TextField校验输入时间的例子        {            fieldLabel...);         }     });   代替submit方法,可以使用BasicForm的updateRecord方法更新form绑定的model,然后用Model的save方法保存数据

    2K50

    Angular 从入坑到挖坑 - 表单控件概览

    响应式表单 建立表单 由组件隐式的创建表单控件实例 在组件类中进行显示的创建控件实例 表单验证 指令 函数 在表单数据发生变更时,模板驱动表单通过修改 ngModel 绑定的数据模型来完成数据更新,...而响应式表单在表单数据发生变更时,FormControl 实例会返回一个新的数据模型,而不是直接修改原来的数据模型 4.2、模板驱动表单 通过使用表单的专属指令(例如 ngModel 进行双向数据绑定)...将数据值和一些对于用户的行为约束(某个字段必须填啊、某个字段长度超过了长度限制啊)绑定到组件的模板中,从而完成与用户的交互 4.2.1、模板驱动表单的双向数据绑定 在根模块中引入 FormsModule...同模板驱动表单的数据有效性验证相同,在响应式表单中同样可以使用原生的表单验证器,在设定规则时,需要将模板中控件名对应的数据值的第二个参数改为验证的规则 在响应式表单中,数据源来源于组件类,因此应该在组件类中直接把验证器函数添加到对应的...因此这里的验证方法需要在定义控件组时作为 FormGroup 的参数传入 与单个字段的验证方式相似,通过实现 ValidatorFn 接口,当表单数据有效时,它返回一个 null,否则返回 ValidationErrors

    18.9K20

    ASP.NET MVC 5 - 给数据模型添加校验器

    在上面的图片中,你可以看到所有的字符串字段被设置为了NVARCHAR  (MAX)数据类型.  我们将使用迁移来更新架构。...该评级(Rating)字段最大长度为5, 标题的最大长度为60。标题(Title )和价格 (Price)的范围的最小长度并没有更改。 请在数据库中,检查电影表的schema: ?...请注意,表单在每一个相应的验证错误消息旁边,已经自动使用红色边框的颜色突出显示文本框指明无效数据。...您在前面教程所创建的控制器和视图会自动启用,使用验证指明的Movie model类的属性。使用Edit行为方法,同样的验证方法也完全适用。直到没有任何客户端验证错误的表单数据,才会被发送回服务器。...调用此方法将验证对象上所有应用了验证约束的属性。如果对象含有验证错误,则Create方法会重新显示初始的form。如果没有任何错误,方法将保存信息到数据库。

    9.1K70

    odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

    自然地我们将总面积定义这两者的总和,我们将为此使用计算的字段的概念,即给定字段的值将从其他字段的值中计算出来。 到目前为止,字段已直接存储在数据库中并直接从数据库中检索。字段也可以被计算。...虽然这通常很方便,但请注意给模型增加的潜在计算压力。让我们重新使用我们的示例。...“onchange”机制为客户端界面提供了一种,无论用户合适填写字段值更新表单,都无需存储任何东西到数据库的一种方法。...对于computed field 和Onchanges的使用没有严格的规则。 在许多情况下,可以使用computed field和onchanges来实现相同的结果。...当计算字段依赖于其他计算字段时,更改值可能会触发大量重新计算。这会导致性能不佳。

    3.2K30

    【转】jQuery验证控件jquery.validate.js使用说明+中文API

    ;form.submit(); } }); 如果想提交表单, 需要使用form.submit()而不要使用$(form).submit() 2.debug,只验证不提交表单 $().ready(function...rules() 返回:Options 返回元素的验证规则 rules("add",rules) 返回:Options 增加验证规则 rules("remove...form的内容. validator对象有很多方法,但下面只是列出常用的 form() 返回:Boolean 验证form返回成功还是失败 element(element...) 返回:Boolean 验证单个元素是成功还是失败 resetForm() 返回:undefined 把前面验证的FORM恢复到验证前原来的状态 showErrors...,比如有个表单字段的id="username",则在rules中写 username:{    af:["a","f"] } addMethod的第一个参数,就是添加的验证方法的名子,这时是af

    4.7K40

    Django-form表单

    它还意味着当Django 收到浏览器发送过来的表单时,它将验证数据的长度。 Form 的实例具有一个is_valid() 方法,它为所有的字段运行验证的程序。...当调用这个方法时,如果所有的字段都包含合法的数据,它将: 返回True 将表单的数据放到cleaned_data属性中。 完整的表单,第一次渲染时,看上去将像: ?...Django Form 类详解 绑定的和未绑定的表单实例 绑定的和未绑定的表单 之间的区别非常重要: 未绑定的表单没有关联的数据。...字段的数据 不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。...> 手工渲染字段 我们没有必要非要让Django 来分拆表单的字段;如果我们喜欢,我们可以手工来做(例如,这样允许重新对字段排序)。

    3.9K70

    结合使用 C# 和 Blazor 进行全栈开发

    共享库包含模型类和非常简单的验证引擎。模型类保留注册窗体中的数据字段。...每个字段都使用映射到验证规则的属性进行修饰。我选择了创建非常简单的模型,它很像实体框架 (EF) 数据注释模型。此模型的所有逻辑都包含在共享库中。...有两种不同的 CheckRules 函数:一种是缺少参数,但对所有字段验证全部规则;另一种有 fieldName 参数,并仅验证特定字段。在字段更新时,使用的是第二种函数,并立即对此字段验证规则。...它使用反射来查找此模型中的字段,并更新字段值。然后,它触发 CheckRules 方法,以对相应字段验证所有规则。Blazor 客户端使用此方法,以在用户在输入文本框中键入内容的同时更新值。...如果输入的文本超过指定的长度上限,图 4 中的长度上限规则返回错误。其他用于验证必填字段、电话和电子邮件地址字段格式的规则的工作方式类似,区别在于它们对要验证的数据类型采用不同的逻辑。

    6.7K40
    领券