bug分析:React中对bizchart宽度压缩问题

bug分析专栏:最近在项目上的bug出现的比较多,想着可以记录一下各种奇怪五花八门的bug的分析和解决方案,越发的觉得对bug的分析和解决更能提升代码的逻辑思维,尤其是对于一个自己不熟悉的项目,react写的也比较少,刚上手的项目就让我直接改bug,确实是一个挑战,针对各种bug做一个简单的记录。

问题描述

在业务中出现了一个图标的宽度发生改变的问题。具体表现为曲线图中,x轴的坐标数据都挤在一块,导致整个图标的宽度变得很小。但是可以看出我们的图表整体的数据仍然存在,x轴和y轴的数据也没有问题。

这个问题是由于图标的宽度变化引起的,导致坐标数据显示异常。接下来记录一下对该问题的分析和解决。

业务代码

js 复制代码
<Chart
        height={500}
        padding={['2%', 'auto', '30%', 'auto']}
        style={{ width: '100%' }}
        data={props.tempValusData}
        scale={props.chartcols}
        forceFit
      >
        <Legend position="bottom" />

分析BUG

1.出现概率:问题出现的复现率不是百分百,只是单单这个表格出现了宽度的变化,

  1. x轴坐标数据挤在一块: 由于图标宽度的改变,x轴上的坐标数据被挤在一块,导致显示异常。

  2. 整体图标宽度变得很小:虽然宽度改变了,但是整体的数据没有发生变化,问题仅仅表现在图标压缩了。

问题定位

第一猜测是canvas的宽度设置了固定宽度,但是可以看到在Chart的元素中只有高度的一个声明,没有对宽度的一个限制

并且其他的chart没有出现宽度的压缩

再次对比了一下正常的chart,发现出现问题的图表下方的lengend标签,貌似超过了父级div的宽度,导致部分lengend没有显示完整

可以看到标签的长度已经超出并且被隐藏,到这里笔者觉得就是这里出现的问题

下方的标签长度太长超过了外层父级div,导致上层的图表被压缩,有经验的开发者应该也会遇到过这个问题

解决流程

问题解决之前不清楚标签使用的元素是什么,所以到官网查一下

可以看到代表的是legend元素

定位到的问题是legend的长度过长,那么就需要对legend的元素进行处理

在legend标签中可以看到有一个itemFormatter的传参,这个是用于处理标签的返回的,在这里对长度进行一个处理,如果超过了20个的字数,就进行省略的操作

js 复制代码
  const legendItemFormatter = val => {
    // 在这里进行字符串截断或其他处理,确保文本长度不超过你想要的长度
    const maxLength = 20;
    return val.length > maxLength ? val.slice(0, maxLength) + '...' : val;
  };
  return (
    <>
      <Chart
        height={500}
        padding={['2%', 'auto', '30%', 'auto']}
        style={{ width: '100%' }}
        data={props.tempValusData}
        scale={props.chartcols}
        forceFit
      >
        <Legend position="bottom" itemFormatter={legendItemFormatter} />

解决效果

解决完成后效果如下,确实图表的压缩是由于下方legend的超出把图标挤在一起了,使用itemFormatter来对legend返回的标签做处理,做出长度限制即可。

🙏 感谢您花时间阅读这篇文章!如果觉得有趣或有收获,请关注我的更新,给个喜欢和分享。您的支持是我写作的最大动力!

往期好文推荐

相关推荐
李姆斯18 分钟前
管理是否可以被完全量化
前端·产品经理·团队管理
戮漠summer1 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
名字还没想好☜1 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司1 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
江华森2 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒2 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
长不胖的路人甲3 小时前
SpringCloud 服务雪崩、熔断、降级
后端·spring·spring cloud
Jackson__3 小时前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby3 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
青禾网络3 小时前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github