React开发中Echarts渲染机制影响图表继承父级宽高

  1. 问题描述:
     前端开发在使用echarts图表时,偶尔会出现超出或不足父级容器宽度或高度的情况。
     情景:给echarts设置了100%宽高,父容器设置了固定的宽高,出现图表占满不了父容器或者溢出容器的情况。如图。
  2. 原因:
     一般不是因为图表绘制的方法调用问题,而是绘制渲染时机出现了问题,我们知道,React渲染页面需要时间,要在页面调用echarts.init(),并且给图表设置配置项chart.setOption(option)。
     调用echarts api生成图表的时机发生在componentDidMount这个生命周期。在页面echarts绘制完成之后进行操作,发现有可能会出现元素虽然挂载了,但是布局还未完成的情况。这就导致图表元素显示超出父级容器很多,同时地,F12可以看到echarts元素的宽高度发生了明显的变化。
     为什么会出现这种情况?父级元素还没有layout的时候,图表就开始生成,这个时候宽度和高度就不受默认布局的影响,而是会找到一个已经布局的大的父级元素作为父级,等真正的父级layout完毕,就超出了图表本身的父级容器。
  3. 解决:
    setTimeout(() => { this.initChart() }, 20)

      在componentDidMount生命周期内异步调用初始化图表函数。等父容器设置完宽高布局完成之后图表加载。

  4.      发现这个bug的解决方法是在,当我拖动浏览器页面时,图表又能自己撑满父级。可以推断出是因为React渲染时间的问题。一般而言,在使用vue或者react都会容易出现这个问题,原因是我们的模板文件不是一开始就生在html页面中,而是需要经过人为渲染,渲染需要时间,图表生成的时机有可能会早于父级元素layout的时机,尤其当我们使用自适应布局的时候会出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值