• ant-design版本升级从V4到V5


    写这篇文章的目的就是记录自己踩过的坑,没有其他的。
    正常情况按照官网给的方式,就可以正常进行版本升级[:](从 v4 到 v5 - Ant Design (antgroup.com))

    但是,这里有一个小坑,就是moment使用的时候报错,来看一下报错信息:

    Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
    
    • 1

    这个报错信息告诉我们的是setStateuseEffect的问题,如果按照这个报错去梳理代码,你会发现,自己的生命周期写的并没有问题。把含有setStateuseEffect都是没用,
    最后定位是ant.design的组件DatePicker组件默认时间

    <RangePicker defaultValue={[dayjs('2015/01/01', dateFormat), dayjs('2015/01/01', dateFormat)]} format={dateFormat} />
    
    • 1

    这里明显看到,那自己代码中所使用的是:

    initialValue: [
      moment(new Date(), 'YYYY-MM-DD'),
      moment(new Date(), 'YYYY-MM-DD'),
    ]
    
    • 1
    • 2
    • 3
    • 4

    那么这两者的区别,也是 很大的,打印log,看两者输出结果:

    // moment
    1.  _d: Tue Oct 24 2023 11:15:52 GMT+0800 (中国标准时间) {}
    1.  _f: "YYYY-MM-DD"
    1.  _i: Tue Oct 24 2023 11:15:52 GMT+0800 (中国标准时间) {}
    1.  _isAMomentObject: true
    1.  _isUTC: false
    1.  _isValid: true
    1.  _locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: 'Invalid date', _dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, ordinal: ƒ, …}
    1.  _pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}
    1.  [[Prototype]]: Object
    
    
    // dayjs
    1.    
        $D: 24
    1.  $H: 11
    1.  $L: "en"
    1.  $M: 9
    1.  $W: 2
    1.  $d: Tue Oct 24 2023 11:15:52 GMT+0800 (中国标准时间) {}
    1.  $isDayjsObject: true
    1.  $m: 15
    1.  $ms: 844
    1.  $s: 52
    1.  $u: undefined
    1.  $x: {}
    1.  $y: 2023
    1.  [[Prototype]]: Object
    
    • 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

    这里可以看出所需结构完全不同了,也可以看到RangePicker代码

    RangePicker: import("./generatePicker/interface").PickerComponentClass & {
        dropdownClassName?: string | undefined;
        popupClassName?: string | undefined;
        rootClassName?: string | undefined;
    }, unknown>;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其中要求的就是Dayjs结构。看到这里其实官网也给了解决方案保留moment,那就是安装

    npm install --save-dev @ant-design/moment-webpack-plugin
    
    • 1

    按照官网给出的信息,我只说一下我这里遇到的问题就是dayjs引入的延申

    import weekday from 'dayjs/plugin/weekday'
    import localeData from 'dayjs/plugin/localeData'
    dayjs.extend(weekday)
    dayjs.extend(localeData)
    
    • 1
    • 2
    • 3
    • 4

    这里会对import的导入进行报错,告诉你这两个文件找不到,具体修改本人没有研究,因为这个是在入口引入,所以不动它,而是去修改的moment。

  • 相关阅读:
    解决error: invalid conversion from ‘unsigned char‘ to ‘unsigned char*‘
    PCL 半径滤波剔除噪点
    【阅读笔记】Java游戏服务器架构实战(待更新)
    欧洲巨头强力支持Higg项目,事关2000个品牌
    破茧化蝶,从Ring Bus到Mesh网络,CPU片内总线的进化之路
    策略验证_指标买点分析技法_运用KDJ随机指标选择买点
    基于JAVA小区物业管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    关于vue跳转,以及如果写框架时候,保留左边和顶部
    Python之哈希表-字典
    Yii2安装遇到Loading composer repositories with package information
  • 原文地址:https://blog.csdn.net/qq_40896095/article/details/134010418