前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

Formily核心概念解析,构建复杂表单的最佳实践总结

首页
2023-01-17 11:40:12
Front-End
FormilyReact表单状态管理前端工程化Ant Design

在前端开发中,表单是几乎每个应用都离不开的核心功能。随着业务复杂度的提升,传统表单实现方式面临着代码冗余、联动困难、校验复杂等诸多挑战。Formily 作为阿里巴巴开源的表单解决方案,正是为了解决这些痛点而生的。本文将带你深入了解 Formily 的核心概念,并通过实际案例展示如何构建复杂表单。

# 一、Formily是什么

# 1.1 表单开发的痛点

在传统的表单开发模式中,我们经常会遇到以下问题:

代码重复严重:每个表单页面都需要编写大量的状态管理、校验逻辑、联动处理代码,这些代码在不同表单之间高度相似,但又无法有效复用。

联动逻辑复杂:当表单中存在多个字段之间的联动关系时,例如"选择A选项后显示B字段"、"当C字段值变化时,D字段需要自动计算"等场景,代码逻辑会变得错综复杂,难以维护。

校验规则分散:表单校验逻辑散落在组件的各个角落,有的在组件state中,有的在form的校验配置中,有的在blur事件回调中,缺少统一的校验管理。

难以动态渲染:对于需要根据后端配置动态生成表单字段的场景,传统方式实现起来非常困难。

# 1.2 Formily的核心定位

Formily 用一句话来描述,它就是一个抽象了表单领域模型的 MVVM 表单解决方案。它将表单的开发模式从传统的命令式编程转变为声明式编程,让开发者可以通过配置化的方式快速构建复杂表单。

Formily 的核心优势包括:

完善的领域模型:Formily 抽象了一套完整的表单领域模型,包括 Form(表单)、Field(字段)、Validator(校验器)等概念,让表单状态管理变得清晰可控。

强大的联动能力:支持主动模式和被动模式两种联动方式,可以轻松实现一对一、一对多、多对一等多种联动场景。

灵活的校验体系:内置强大的 @formily/validator 校验引擎,支持 JSON Schema 协议校验、自定义规则校验、异步校验等多种方式。

多框架支持:提供了 @formily/react 和 @formily/vue 两个核心包,兼容 React 和 Vue 两大主流框架。

# 二、核心概念与架构

# 2.1 MVVM架构模式

Formily 采用经典的 MVVM(Model-View-ViewModel)架构模式:

  • Model(模型):对应 @formily/core 中的 Form 实例,管理整个表单的状态、数据、校验规则
  • View(视图):对应表单的 UI 组件,如 Input、Select 等
  • ViewModel(视图模型):对应 Field 实例,连接 Model 和 View 的桥梁

这种架构模式的优势在于:表单的状态管理与 UI 渲染完全解耦,开发者可以专注于业务逻辑的实现,而无需关心状态更新的细节。

# 2.2 核心包结构

Formily 的包结构设计非常清晰,主要分为以下几个层次:

核心层:@formily/core 是整个表单解决方案的核心,负责管理表单的状态、表单校验、联动逻辑等。

桥接层:@formily/react 和 @formily/vue 分别提供了 React 和 Vue 的适配层,让核心库能够与各框架无缝集成。

组件层:@formily/antd 和 @formily/next 是基于 Ant Design 和 Alibaba Fusion 封装的组件库,提供了开箱即用的表单组件。

# 2.3 核心API概述

Formily 的核心 API 主要包括:

createForm:用于创建表单核心领域模型,它是作为 MVVM 设计模式的标准 ViewModel。

import { createForm } from '@formily/core'

const form = createForm({
  // 表单初始值
  initialValues: {
    username: '',
    password: ''
  },
  // 表单变化回调
  onChange: (values) => {
    console.log('表单值变化:', values)
  },
  // 副作用处理
  effects: ($, { onFieldValueChange }) => {
    onFieldValueChange('username', (field) => {
      console.log('username 变化:', field.value)
    })
  }
})
@前端进阶之旅: 代码已经复制到剪贴板
fe
  • 一、Formily是什么
    • 1.1 表单开发的痛点
    • 1.2 Formily的核心定位
  • 二、核心概念与架构
    • 2.1 MVVM架构模式
    • 2.2 核心包结构
    • 2.3 核心API概述
  • 三、快速开始
    • 3.1 安装依赖
    • 3.2 基础用法
  • 四、表单校验详解
    • 4.1 校验方式概述
    • 4.2 内置规则校验
    • 4.3 内置格式校验
    • 4.4 自定义规则校验
    • 4.5 异步校验
    • 4.6 联动校验
  • 五、表单联动详解
    • 5.1 联动模式概述
    • 5.2 主动模式实现
    • 5.3 被动模式实现
    • 5.4 联动状态控制
  • 六、最佳实践
    • 6.1 表单结构设计
    • 6.2 复杂联动场景
    • 6.3 性能优化
    • 6.4 与 Ant Design 结合
  • 七、总结

← 拯救磁盘空间 为什么pnpm是更好的包管理工具前端异常监控平台之Sentry落地 →