element-plus-fast-form
Version:
基于 Vue 3 和 Element-Plus 的表单和 CRUD 组件封装库
59 lines (39 loc) • 3 kB
Markdown
# formCore.tsx 与 form.tsx 类的架构与渲染方式分析
本项目的表单核心类 `formCore.tsx` 和业务扩展类 `form.tsx`,采用了区别于传统 props 配置驱动的表单组件设计。以下为详细分析:
## 1. 传统可配置表单组件的做法
- 通过 props(如 `:formConfig="..."`)将表单配置传递给组件。
- 组件内部通过 watch props 变化来重新渲染表单结构。
- 缺点:
- 每次配置变更都需要整体传递和监听,容易导致全量渲染和性能浪费。
- 业务层需要频繁操作响应式对象,代码分散,维护成本高。
- 动态增删、联动等复杂场景下,props 传递和 watch 逻辑容易混乱。
## 2. formCore.tsx 和 form.tsx 的封装方式
### 类封装 + 方法驱动 + 响应式管理
- **类封装**:`FormCore` 封装了表单的核心逻辑,`Form` 继承并扩展业务方法。
- **响应式属性**:表单配置(formConfig)、表单值(formValue)等由类内部 reactive/shallowReactive 管理,而不是依赖 props。
- **方法驱动**:所有表单结构和数据的变更(如 setFormConfig、addFormConfig、removeFormConfig、setComponentProps、setFormValue 等)都通过类方法进行,业务层只需调用方法即可。
- **渲染方式**:通过类的 getform 方法返回一个 defineComponent 组件,内部直接用 JSX/h 渲染表单结构,所有配置和数据都取自类实例的响应式属性。
### 自定义组件渲染流程
- 业务层通过 `useForm` 获取表单实例和方法。
- 通过方法动态增删、修改表单项配置,类内部自动响应并更新视图。
- 渲染时,类实例的 formConfig 决定表单结构,formValue 决定表单数据,所有变更自动响应。
## 3. 优点分析
### 1. 更高的灵活性和动态性
- 支持任意时机、任意方式动态增删、修改表单项和表单值,无需依赖 props 传递和 watch。
- 适合复杂联动、动态表单、低代码等场景。
### 2. 更好的性能
- 只会响应式更新实际变更的部分,避免全量渲染和无谓的 DOM 更新。
- 方法内部可精细控制更新粒度(如 Object.assign 局部更新)。
### 3. 更强的封装性和可维护性
- 表单所有操作都集中在类方法,业务层只需调用 API,逻辑清晰、易维护。
- 便于扩展和继承,适合大型项目和团队协作。
### 4. 多实例隔离
- 每次 useForm/useCrud 返回独立的表单实例,互不影响,适合多表单并存场景。
### 5. 插槽和自定义组件支持
- 插槽参数自动注入所有表单方法,便于自定义表单项行为和扩展。
## 4. 总结
formCore.tsx 和 form.tsx 采用**类封装+方法驱动+响应式管理**,通过内部响应式属性和方法操作实现表单的动态渲染和管理,**不依赖 props 变更**,极大提升了灵活性、性能和可维护性,非常适合复杂、动态、低代码场景的表单开发。