前端组件—— 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

相关文章
|
10天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23449 10
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
14天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
4808 16
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
15天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
5797 14
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
25003 65
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3天前
|
前端开发 API 内存技术
对比claude code等编程cli工具与deepseek v4的适配情况
DeepSeek V4发布后,多家编程工具因未适配其强制要求的`reasoning_content`字段而报错。本文对比Claude Code、GitHub Copilot、Langcli、OpenCode及DeepSeek-TUI等主流工具的兼容性:Claude Code需按官方方式配置;Langcli表现最佳,开箱即用且无报错;Copilot与OpenCode暂未修复问题;DeepSeek-TUI尚处早期阶段。
793 2
对比claude code等编程cli工具与deepseek v4的适配情况

热门文章

最新文章