File size: 4,624 Bytes
c9d0005 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | ---
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 事件的同时执原本的监听事件。
|