| --- |
| order: 0 |
| toc: content |
| mobile: false |
| hide: true |
| group: |
| title: 其他 |
| order: 5 |
| --- |
| |
| # V2 升级方案 |
| 本文档将帮助你从 1.x 升级到 2.x 版本,2.x 将不再对 0.x 版本进行兼容 |
|
|
| ## 特性 |
|
|
| 全新的 form-render 2.0 主要具备以下特性: |
|
|
| - 🚀 **更好的表单性能**:通过对 form-render 重构,底层接入 Antd Form 来实现表单的数据收集、校验等逻辑,提升表单的整体性能。有效的解决了表单数据改变表单全局刷新的问题。 |
| - 🎨 **全新的UI样式**:通过对中后台表单业务梳理,定制了一套全新的 UI 样式和交互规范,提升表单整体美观度 。[最佳展示](/form-render/display-row) |
| - 🚥 **国际化**:国际化多语言支持,内置中英文语言包,英文版 locale: 'en-US' |
| - 💎 **Antd V5**:兼容 antd V5 版本,无需配置 |
|
|
| ## 依赖升级 |
| ```diff |
| "dependencies": { |
| - "form-render": "^1.0.0", |
| + "form-render": "^2.0.0", |
| } |
| ``` |
|
|
| ## 不兼容处理 |
|
|
| ### form.formData 弃用 |
| form.formData 弃用,改用 form.getValues() 方式获取 |
|
|
| ```diff |
| - form.formData |
| + form.getValues() |
| ``` |
|
|
| ## Schema 相关 |
|
|
| ### theme 弃用 |
| 嵌套组件 theme 字段 弃用,统一改成 widget 声明。 |
| 默认是 widget: 'collapse' 折叠卡片,其他类型参考 [表单布局](/form-render/advanced-layout) 示例 |
|
|
| ### description 不再自动调整样式 |
| 在 1.x 中 description 在 displayType 为 `row` 的情况下,会自动转换为 tooltip。在 2.x 中不再自动转换,需要手动调整 |
|
|
| ```diff |
| { |
| displayType: 'row', |
| - description: 'xxx', |
| + tooltip: 'xxx' |
| } |
| ``` |
|
|
| ### bind 会在 `form.setValues`、`form.getValues` 以及 `onFinish` 生效 |
|
|
| 在 2.x 中 bind 会始终生效,你应该始终使用 bind 之后的 formData。 |
|
|
| ### required 不支持统一设置 |
|
|
| 你需要在每个 item 中指定 `required` |
|
|
| ```diff |
| { |
| - required: [ |
| - 'input', |
| - ], |
| properties: { |
| input: { |
| title: '输入框', |
| type: 'string', |
| + required: true, |
| } |
| } |
| } |
| |
| ``` |
|
|
| ### validator 直接返回布尔或对象 |
|
|
| 2.x 中 validator 可以直接返回布尔,或者对象用于动态设置 message 内容 |
|
|
| ```diff |
| { |
| validator: (_, value) => { |
| - return Promise.reject('xxx') |
| + return { |
| + status: false, |
| + message: 'xxx', |
| + } |
| |
| - return Promise.resolve() |
| + return true |
| }, |
| } |
| |
| ``` |
|
|
| ## Form 相关 |
|
|
| ### useForm 入参移除 |
| ```js |
| { |
| formData, |
| onChange, |
| onValidate, |
| showValidate, |
| /** 数据分析接口,表单展示完成渲染时触发 */ |
| logOnMount: _logOnMount, |
| /** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */ |
| logOnSubmit: _logOnSubmit, |
| } |
| ``` |
| logOnMount、logOnSubmit 通过 props 传递,其他几个废弃 |
|
|
| 注意 logOnMount、logOnSubmit 不再兼容从上获取 window.FR_LOGGER |
| |
| |
| |
| ### onFinish 提交函数 |
| 只有校验通过 onFinish 才会被触发,不在返回错误信息参数,为了兼容1.0版本,错误信息默认返回 [] |
| |
| |
| ```diff |
| - const onFinish = (data, errors) => { |
| |
| } |
| |
| + const onFinish = (data) => { |
| |
| } |
| |
| ``` |
| ### validateFields |
| errorInfo 的出参名称发生变更 |
| |
| ```diff |
| validateFields() |
| .then(values => { |
| /* |
| values:{ |
| input1: 'input1 输入的值' |
| } |
| */ |
| }) |
| .catch(errorInfo => { |
| /* |
| errorInfo: |
| { |
| - data: { |
| - input1: 'input1 输入的值', |
| - }, |
| |
| + values: { |
| + input1: 'input1 输入的值', |
| + }, |
| |
| |
| - errors: [ |
| - { name: 'input1', error: ['input1 的error信息'] }, |
| - ] |
| + errorFields: [ |
| + { name: ['password'], errors: ['Please input your Password!'] }, |
| + ], |
| |
| } |
| */ |
| }); |
| |
| ``` |
| |
| ### globalProps 变更 |
| 通过`globalProps`注入的数据在任何组件(以及自定义组件)中可以被取到和使用。 |
| 变更:自定义组件 通过 props.addons.globalProps 然后进行解构,不在自动进行属性合并注入到自定义组件中(防止其他组件被污染) |
| |
| |
| ### mapping 弃用 |
| mapping 配置弃用,映射关系通过 widgets 组件实例进行覆盖(如果和内部名字一样会覆盖内部组件) |
| ```json |
| input, |
| checkbox, // 勾选框 |
| checkboxes, // checkbox多选 |
| color, |
| date, |
| time, |
| dateRange, |
| timeRange, |
| imageInput, |
| url, |
| select, |
| multiSelect, // 下拉多选 |
| number, |
| radio, // Radio.Group) |
| slider, // 带滚条的number |
| switch, |
| textarea, |
| upload, |
| html, |
| rate, |
| treeSelect, |
| errorSchemaWidget // 错误显示 |
| ``` |
| |
| ### Watch 不再监听 set 事件 |
| |
| 在 2.x 中,`watch` 不再监听由于 `setValues` 和 `setValueByPath` 导致的数据变化。你应该在执行 set 事件的同时执原本的监听事件。 |
| |