ant.design使用组件Tabs切换路由,发现echarts渲染图标不成功

问题描述:
tabs切换路由,默认进入第一个界面echarts图表能渲染成功,但是切换至第二个界面时,echarts渲染图表不成功,是一片空白。刷新当前路径,图表能渲染,但是切换至第一界面再切回,又是一片空白。

尝试解决方法:

  • 打开控制台,找到渲染的div(可确定div有固定的宽高),发现div上没有渲染的canvas,可以确定echarts实例化未成功;


    无canvas.png
  • 在echarts实例化后打印dom,发现dom上有渲染的echarts实例。
  • 结果发现界面渲染多次,次数小于或等于tabs标签页的页数,再次打开调试器的elements,发现有两个相同的div,都渲染echarts图表,前面隐藏的div有echarts实例。


    未渲染上的div层.png
渲染上的div层.png

ant.design的tabs组件有缓存机制,echarts渲染实例的时候先渲染了缓存中的dom,所以我们的界面再次渲染时,由于已存在一个实例而渲染不成功。

解决方法:

 <Tabs defaultActiveKey={activeKey}  onChange={this.changeRoute}>
    {tabsArr.map(tabpane => (
       <TabPane
           tab={<span><Icon type={tabpane.icon} />{tabpane.title}</span>}
           key={tabpane.key}
       >
           <Switch>
              {getRoutes(match.path, routerData).map(item => (
                   <Route
                        key={item}
                        path={item.path}
                        component={item.component}
                        exact={item.exact}
                   />
             ))}
           </Switch>
       </TabPane>
    ))}
</Tabs>

把路由加载那部分提出来,不放在 tabs里面,代码改成下面这样即可。


修改后代码.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 获取 ECharts 可以通过以下几种方式获取 ECharts。 从 Apache ECharts (inc...
    飞扬code阅读 1,229评论 0 1
  • 这几天公司里边有一个项目,叫做日控制台,该项目是在webview下的一个webapp,使用vue构建,项目中要求使...
    剑来___阅读 8,109评论 2 9
  • 简介 使用echarts-for-react插件可以在React中调用echarts接口直接渲染出Echarts图...
    毕安阅读 61,498评论 0 7
  • 特性介绍 百度的ECharts目前在国内使用的比较多,ECharts一个纯 Javascript的图表库,可以流畅...
    CodeMT阅读 932评论 0 3
  • 前端必读:浏览器内部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是强强阅读 1,165评论 0 2