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返回的标签做处理,做出长度限制即可。

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

往期好文推荐

相关推荐
咖啡の猫1 小时前
Shell脚本-for循环应用案例
前端·chrome
uzong3 小时前
面试官:Redis中的 16 库同时发送命令,服务端是串行执行还是并行执行
后端·面试·架构
关键帧-Keyframe3 小时前
音视频面试题集锦第 26 期
面试·音视频
百万蹄蹄向前冲3 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
追逐时光者4 小时前
.NET 使用 MethodTimer 进行运行耗时统计提升代码的整洁性与可维护性!
后端·.net
朝阳5814 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路4 小时前
GeoTools 读取影像元数据
前端
ssshooter5 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
你的人类朋友5 小时前
【Node.js】什么是Node.js
javascript·后端·node.js
Jerry5 小时前
Jetpack Compose 中的状态
前端