项目开发过程中遇到的问题

1. 如何进入默认路由

{
    path: '/dashboard',
    element: <Layout></Layout>,
    children: [
        //添加一个path为空的二级路由
        {
            path: '',
            element: <Navigate to="console"></Navigate>
        },
        {
            path: 'console',
            element: <Console></Console>
        }
    ]
}

2. 表单自定义验证器

Antd5 中返回Promise

//定义验证密码的规则
const checkPw = (rule, value) => {
  if (value.length === 0) {
    return Promise.reject("密码不能为空")
  }
  if (/^[\da-z]{3,8}$/.test(value)) {
    return Promise.resolve()
  } else {
    return Promise.reject("密码应该是3-5位的数字或小写字母")
  }
}
...
<Form.Item
    label="密码"
    name="pw"
    rules={[
           { validator: checkPw }
           ]}
    >
    <Input.Password />
</Form.Item>

3. Antd5中message 的Hook用法

https://mp.csdn.net/mp_blog/creation/editor/129176794

4. 删除tabs项目时,无法在dispatch后获取最新activeKey

解决方案: 组件监听activeKey的变化

useEffect(()=>{
    if (isCurrent){
        navigate(activeKey)
    }
},[activeKey])

5. Tabs标签页的处理

https://mp.csdn.net/mp_blog/creation/editor/129361881

  • 删除当前项后,让后一个作为当前项,并路由跳转

  • 删除最后一项时,如果是当前项,则让前一个作为当前项,如果不是当前项,则只删除

  • 第一项默认项不显示删除功能

6. Antd5 日期数据的特殊处理

不能再使用moment库,会出现bug, 要使用dayjs库处理时间

import dayjs from 'dayjs'
  • 从表单获取后要用dayjst转换后才能传给后台

    dayjs(日期).format("YYYY-MM-DD")
  • 从后台拿到的数据要dayjs处理后才能显示在表格中

    dayjs(日期).format("YYYY-MM-DD")
  • 在编辑班级中数据回显时,要用deyjs先处理

    dayjs(日期)
  • 也可以在DatePicker上添加事件,自动转换

    const onChange = (value,dateString)=>{
        // value为原值, dateString为转换后的日期
    }
    ...
    <DatePicker onChange={onChange}/>

7. 在第一页添加班级后,页面不更新

原因: 监听page变化才重新请求数据,但page值没变化

解决方案: 设置一个状态,每次添加后让状态取反,并在监听page的同时监听这个状态,这样只要是添加班级就可以触发数据请求

8. 删除班级的边界处理

  • 删除最后一页唯一的一条数据时,再拉取数据,页码要减1

//判断当前删除的是否为最后一页唯一的一条,
  const isEnd = () => {
    //算法思路: 计算最后一页(当前页)第一条是总条数里的第几个,如果数值和total相等,即为最后一页唯一的一条
    // 13 
    return total === (page - 1) * 4 + 1
  }
  //删除班级
  const onDelete = async (classId) => {
    let res = await _delClass({
      classId
    })
    console.log(res);
    let { code } = res.data
    if (code === 0) {
      message.success("删除成功")
      //判断当前删除的是否为最后一页唯一的一条,并且不是所有数据仅剩的一条
      if (isEnd() && total !== 1) {
        setPage(page - 1)
      } else {
        setIsAddAction(!isAddAction)
      }
    } else {
      message.error("删除失败")
    }
  }
  • 删除最后剩的一条记录时,要显示暂无数据

 //获取数据
  const getData = async () => {
    let res = await _getClassList({
      page,
      ...search
    })
    let { code, list, total } = res.data
    if (code === 0) {
      setClassList(list)
      setTotal(total)
    } else {
      //没有数据时
      setClassList([])
      setTotal(0)
    }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值