前端组件—— Final Form 知识点大全(二)

简介: 教程来源 http://lemci.cn React Final Form 是轻量(仅3.2kB gzip)、高性能的表单库,基于订阅模式实现精准渲染。支持 `Form`/`Field` 组件、`FormSpy` 监听、`useField`/`useForm` 等 Hooks,开箱即用验证、重置与异步提交,适合构建复杂可控表单。

三、安装与快速入门

3.1 安装

# 安装核心库
npm install final-form

# 安装 React 绑定
npm install react-final-form

3.2 最简示例

import React from 'react';
import { Form, Field } from 'react-final-form';

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

const onSubmit = async values => {
  await sleep(300);
  window.alert(JSON.stringify(values, 0, 2));
};

const required = value => (value ? undefined : '此项为必填项');

const App = () => (
  <Form
    onSubmit={onSubmit}
    initialValues={
  { username: 'admin' }}
    render={({ handleSubmit, form, submitting, pristine, values }) => (
      <form onSubmit={handleSubmit}>
        <div>
          <label>用户名</label>
          <Field name="username" validate={required}>
            {({ input, meta }) => (
              <div>
                <input {...input} type="text" placeholder="用户名" />
                {meta.error && meta.touched && <span>{meta.error}</span>}
              </div>
            )}
          </Field>
        </div>
        <div>
          <label>密码</label>
          <Field name="password" validate={required}>
            {({ input, meta }) => (
              <div>
                <input {...input} type="password" placeholder="密码" />
                {meta.error && meta.touched && <span>{meta.error}</span>}
              </div>
            )}
          </Field>
        </div>
        <button type="submit" disabled={submitting}>提交</button>
      </form>
    )}
  />
);

四、核心 API 详解

4.1

组件

是 Final Form 的根组件,它创建一个表单上下文,并提供表单的状态管理。
image.png
render 属性:
render 属性接收一个函数,该函数的参数包含以下常用属性:
image.png
<Form
  onSubmit={onSubmit}
  render={({ handleSubmit, form, submitting, values }) => (
    <form onSubmit={handleSubmit}>
      {/* 表单内容 */}
      <button type="button" onClick={() => form.reset()}>重置</button>
    </form>
  )}
/>

4.2 组件

组件用于注册和管理单个表单字段。它通过 render props 模式将字段的输入属性和元数据暴露给子组件。
image.png
render 函数的参数:
image.png

<Field name="email" validate={validateEmail}>
  {({ input, meta }) => (
    <div>
      <input {...input} type="email" />
      {meta.touched && meta.error && <span>{meta.error}</span>}
    </div>
  )}
</Field>

4.3 组件

组件用于订阅表单状态,但不渲染任何 DOM 元素,适合用于监听表单变化。

import { FormSpy } from 'react-final-form';

<FormSpy subscription={
  { values: true }}>
  {({ values }) => (
    <pre>{JSON.stringify(values, 0, 2)}</pre>
  )}
</FormSpy>

4.4 useField Hook
useField 是 React Final Form 提供的 Hook 版本 API,可以在函数组件中直接创建字段。

import { useField } from 'react-final-form';

const MyField = ({ name }) => {
  const { input, meta } = useField(name);
  return (
    <div>
      <input {...input} />
      {meta.touched && meta.error && <span>{meta.error}</span>}
    </div>
  );
};

4.5 useForm Hook
useForm 用于获取当前表单实例,可以在任何子组件中使用。

import { useForm } from 'react-final-form';

const ResetButton = () => {
  const form = useForm();
  return <button onClick={() => form.reset()}>重置表单</button>;
};

4.6 useFormState Hook
useFormState 用于订阅整个表单的状态。

import { useFormState } from 'react-final-form';

const FormStateDisplay = () => {
  const { pristine, valid, submitting } = useFormState();
  return (
    <div>
      是否修改: {String(pristine)}<br />
      是否有效: {String(valid)}<br />
      是否提交中: {String(submitting)}
    </div>
  );
};

来源:
http://xcfsr.cn

相关文章
|
12天前
|
JavaScript Java 关系型数据库
全栈(Java + Vue + MySQL)开发图书管理系统教程(一)
教程来源 https://yyvgt.cn 本教程带你从零打造全栈图书管理系统,涵盖Spring Boot+Vue3前后端分离开发、JWT认证、RBAC权限控制、MySQL数据库设计(含范式化/索引/软删除)及统一RESTful接口规范,深入原理与工程实践。
|
16天前
|
JSON 小程序 前端开发
前端组件库——Vant Weapp知识点大全
教程来源 http://oplhc.cn/ Vant Weapp是有赞官方打造的高星(1.1w+)微信小程序UI组件库,轻量、稳定、高性能,含50+组件与CSS变量主题系统,支持按需引入与深度定制,是小程序开发首选开源UI方案。
|
18小时前
|
前端开发 开发者
前端组件库 ——WeUI 知识点大全(四)
教程来源 http://lemci.cn WeUI 基于 CSS 自定义属性构建完整主题变量系统,涵盖颜色、字体、间距、圆角、阴影、动画等维度,支持明/暗双模式自动切换,命名规范统一(--weui-{category}-{name}),无需修改源码即可高效定制品牌风格。
|
21小时前
|
资源调度 前端开发
前端组件库—— FullCalendar 知识点大全(三)
教程来源 http://fndvx.cn FullCalendar提供丰富交互回调(如dateClick、eventClick、eventDrop、loading、datesSet等),支持事件拖拽、数据加载、视图切换响应;配合Scheduler插件还可实现资源调度与自定义时长视图,满足会议室预订、排班等复杂场景需求。
|
18小时前
|
移动开发 前端开发 小程序
前端组件库 ——WeUI 知识点大全(二)
教程来源 http://oieaw.cn WeUI是微信官方UI库,提供按钮、输入框、列表等表单组件,图标、Flex/网格等基础组件,Dialog/Toast/ActionSheet等反馈组件,以及导航、数据展示和搜索组件,全面支持微信小程序与H5页面开发。
|
27天前
|
机器学习/深度学习 运维 监控
超市店铺偷窃行为检测数据集(4000张高质量标注)|YOLO安防检测数据集
本数据集含4000张超市真实场景图像,精准标注“正常”与“偷窃”两类行为,YOLO标准格式(归一化bbox),适配YOLOv5/v8等模型。覆盖货架、收银区等复杂环境,含遮挡、光照变化及行为多样性,支持安防预警、异常检测与AI研究。
超市店铺偷窃行为检测数据集(4000张高质量标注)|YOLO安防检测数据集
|
10天前
|
弹性计算 开发框架 前端开发
前端组件库 ——A-Frame 知识点大全(一)
教程来源 https://zlpow.cn A-Frame 是 Mozilla 开源的 WebXR 框架,以声明式 HTML(如 `&lt;a-scene&gt;` `&lt;a-box&gt;`)降低 VR/AR 开发门槛。基于 Three.js 与 WebGL,支持跨平台运行,让 Web 开发者零基础快速构建沉浸式 3D 体验。
|
11天前
|
SQL 前端开发 JavaScript
全栈(C + HTML/CSS/JS + MySQL)开发学生管理系统教程(四)
教程来源 https://www.xbivx.cn/ 本教程基于C语言实现Web学生管理系统,涵盖CGI编程、MySQL交互、安全防护(防SQL注入/XSS)、部署排错及性能优化。通过curl测试API、HTML动态渲染与JSON数据交换,深入理解Web底层原理。
|
10天前
|
弹性计算 前端开发 JavaScript
前端组件库 ——A-Frame 知识点大全(二)
教程来源 https://bncne.cn A-Frame核心采用声明式ECS架构:实体(`&lt;a-entity&gt;`)为容器,组件(如`position`、`material`)提供可复用功能,系统实现全局管理。该模式解耦灵活、易于扩展,让Web开发者用HTML语法高效构建VR/3D场景。
|
15天前
|
机器学习/深度学习 数据采集 算法
6类钢材表面缺陷检测数据集(6000张)|YOLO训练数据集 工业质检 缺陷识别 智能制造 表面检测
本数据集含6000张真实工业场景钢材表面图像,精准标注6类典型缺陷(裂纹、夹杂、斑块、麻面、氧化皮压入、划痕),采用YOLO标准格式,结构规范、质量高,可直接用于YOLOv5/v8等模型训练,助力工业质检智能化升级。

热门文章

最新文章