• 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。

  • 相关阅读:
    【Angular】07管道pipe
    【Hack The Box】windows练习-- Bastard
    【Qt】Qt Style Sheets (QSS) 指南:打造个性化用户界面
    git本地项目与远程仓库建立连接
    神经网络控制器设计步骤,神经网络控制系统设计
    【滑动窗口】LCR 017. 最小覆盖子串
    Turtlebot3-burger入门教程#foxy版#-OpenCR安装
    Dart 2.18 正式发布
    el-form-item validator 携带额外的参数
    【Python机器学习】sklearn.datasets分类任务数据集
  • 原文地址:https://blog.csdn.net/qq_40896095/article/details/134010418