Antd 3 To 4 升级排雷 |
您所在的位置:网站首页 › 3650m5主板V3升级V4 › Antd 3 To 4 升级排雷 |
从 v3 到 v4 随着 react 改版, antd4 升级,对3版本的写法有着非常大的更改。在项目后续开发中,如果不尽快做 antd4 的升级处理,后期维护和新开发组件的成本会极大提升。因此,决定迅速解决过去写法的问题,将 antd4 快准狠的升级完毕。 准备工作这一步可以不做 Npm install 初始化项目 Npm upgrade [email protected] --更新 antd包到3版的终极版本 Npm run start --跑一下项目,观察是否有问题 升级 antd4 # 通过 npx 直接运行 npm i -g @ant-design/codemod-v4 # 或者全局安装 # 使用 npm npm i -g @ant-design/codemod-v4 # 或者使用 yarn yarn global add @ant-design/codemod-v4 # 运行 antd4-codemod src 解决问题 将 antd4 自动化脚本运行完成后,会有提示告知是否需要手动修改 转换需要依赖 @ant-design/icons 和 @ant-design/compatible Ant-design 的组件需要依赖 react 和 react-dom 16.9.0 以上,所以要升级 react 和 react-dom 最后升级 antd 版本 npm install [email protected] # 根据提示安装 @ant-design/icons 和 @ant-design/compatible 对应版本 npm install @ant-design/icons npm install @ant-design/compatible npm install [email protected]或者可以通过修改 package.json 的方式,重新初始化 node_modules 包 运行项目运行项目会出现的样式问题,存在问题的例子 这是因为 ant-design 的css 没有包含在 loader 的文件里,通过将@ant-design 添加到 include 里解决 2.Input 样式调整,之前的样式在 .ant-input 可以包括整个 input 组件, 升级后 .ant-input 是不包含搜索icon 的,所以将原来的样式调整到 .ant-input-affix-wrapper 3.Antd 默认背景颜色从透明修改为白色了,并且table的层级去掉 .ant-table-body 并且添加了 .ant-table-container 4.Table 的 dataIndex 写法更改 data.name v3.0 => ['data', 'name'] data[0].name v4.0 => ['data', 0, 'name'] 5.select 等组件都使用了虚拟渲染技术,通过 virtual 配合 listHeight 来控制,但是 4.0 版本并不友好,会出现滑动卡顿的现象,升级到最新版本可以有效改善。 6.useEffect 或者 useMemo 中如果依赖了空数组或者空对象,会不断触发页面刷新导致内存泄漏页面卡死,解决办法是重新定义了一个依赖变量,如果是空对象或者数组,将其定义为 undefined 7.针对Form表单:Form.create()动态创建表单形式被移除,antd4中表单的创建form.create()全部被收纳到Form.Item中,在运行antd4-codemod src后,Form表单的来源被切换到了@ant-design/compatible中来兼容antd3的模式 8.升级antd4后Typescript类型问题解决, 例如select组件的mode类型在antd4中只有 "multiple"和“tags”两种类型,需要替换所有相关的ts类型 9.Table不触发render的问题,antd4 Table对渲染条件进行了优化,对props进行“浅比较”,如果没有变化回不触发render。 - dataSource.push(newData); - this.setState({ dataSource }) // 对dataSource进行重新赋值 + this.setState({ + dataSource: { ...dataSource, newData } + })10.antd4中的table数据行在每次更新数据时并不能进行table的rerender,此原因和4中类似,此时需要给table指定rowKey,并在每次更新每行数据时更新当前行的rowKey值。 // 更新数据: const newData = { ...data, __key: item.key + Date.now() }; // table表格 record.__key} ... /> Antd Typescript问题 Form相关类型 可能引用路径是antd3,需要手动修改成antd4兼容版本路径 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |