echarts+react17 实现联动的时间统计图表

一.环境准备

        首先需要下载echarts资源环境,如何安装大家动动手指自行查找吧。

        

二.编程实现

        最近项目上面有个界面展现的数据分析界面需要我参与设计,按照我的想法在网上找了一些有关图标展示比较炫酷的界面,第一个想到的就是百度开源出来的echarts,找了一个比较合适的集成到项目里面,下面直接上代码。。。

        1.uniqBy遍历数据集进行去重

uniqBy(
        datalist.map(el => ({ value : el.taskId})),
        'value'
      ),
      [datalist]

        说明:这里使用uniqBy方法对taskId这个字段进行去重,去重后taskId字段显示唯一。

        2.filter对数据集筛选,实现图表的联动效果。

 const taskSelectedResultes = useMemo(() => {

    if (taskSelectResult.length) {
      return datalist.filter(el => taskSelectResult.includes(el.taskId));
    }
    return datalist;
  }, [taskSelectResult, datalist]);

        3.封装方法,方便后续修改。

<SimResult
              echarts={echarts}
              dataSource={taskSelectedResultes}
              taskSelectOption={taskSelectOption}
              curCheck={curCheck}
              setCurCheck={setCurCheck}
              setTaskSelectResult={setTaskSelectResult}
              rowSelects={rowSelects}
              setRowSelects={setRowSelects}
            />

        4.选择框、echarts图表接收并处理数据集

const options = {
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow' 
          }
        },
        legend: {},
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: {
          type: 'value'
        },
        yAxis: {
          type: 'category',
          data: ['uav1', 'uav2', 'airship', 'uuv']
        },
        series: [
          {
            name: '起始位置距拍摄位置时长',
            type: 'bar',
            stack: 'total',
            label: {
              show: true
            },
            emphasis: {
              focus: 'series'
            },
            data: [result[0]?.startShootingTime, result[1]?.startShootingTime, result[2]?.startShootingTime, result[3]?.startShootingTime]
          },
          {
            name: '拍摄总时长',
            type: 'bar',
            stack: 'total',
            label: {
              show: true
            },
            emphasis: {
              focus: 'series'
            },
            data: [result[0]?.shootTime, result[1]?.shootTime, result[2]?.shootTime, result[3]?.shootTime]
          },
        ]
      };
    return (
    <div style={{ marginTop: "24px" }} >
     <Select 
        placeholder="请选择任务ID" 
        style={{ minWidth: 150 }}
        onChange={value => {
            props.setTaskSelectResult(value);
            console.log("value",value);
        }}
        options={props.taskSelectOption}
     />
     <ReactECharts 
        style={{ height: 240 }}
        echarts={props.echarts}
        option={options}
        notMerge={true}
        lazyUpdate={true}
        />
    </div> 

        最后界面出来的效果如下,达到我们预期的效果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
那么可能有人说目前所有的三方库都是开源的,都开放,那我们又该如何选择呢?我们选择语言、框架可以参考以下几个指标: 一:开放性。尽量选择开放性的,或者说是开源的语言和框架,用的人多了,才能火起来。 二:热度。热度包括两个维度,一个是参与的总人数,另一个持续增加的人数。总人数少了不行,近期活跃度低的也不行,缺一不可。如果总人数太少,持续增加的人较多,那你还是等等。微软出产品一般规律是:一版本是看着花哨,二版本是试着用用,三版本才算定型,过了三版之后,还能稳定,你再介入吧。 三:后台硬不硬。关键看支持的研究机构或公司牛不牛,不牛的公司当然也可能成功,但概率较低。现在马云要干点什么,比人民群众要容易的多,谁让他的钱多的烧不完呢。 四:应用广度。应用广度是指语言或框架的应用领域是否丰富,Java适用于服务端,Web端、移端,但C#基本只用于服务端和台式机,尽管Sliverlight也用于移端,但基本上也就是Windows Phone的一亩三分地上了。 五:先进性。语言或框架是否有成熟的理论支持,关系数据库统治了那么多年,面向对象的将面向过程拍死在沙滩上,我个人认为还是背后理论的强大。 好了,指标列出来了,你可以做一个二维表格,将各个前端框架放进去一一比较了。有兴趣的可以对比一下,我只挑React说说。 React几乎全部满足以上条件。我们可以看看React的个人条件: 一:React开源。不仅React开源,React的核心库、React的生态圈都开源。 二:React开发者众。React的开发者持续增加,最新的统计数据中,不少前端开发者从其它框架转向了React,相反,React开发者却很少转向其他框架。 三:React由FaceBook支持,MIT许可。 四:React应用极广,大家熟知的是Reactjs、ReactNative,分别支持Web端和移端。并且同时支持Android 和IOS。另外还有处于起步阶段的React VR,支持虚拟现实,可以运用于虚拟现实设备中,支持360度视角。是不是有些小兴奋。来张React VR的Helloworld图。 五:React是完全的基于组件化的,大量采用函数式编程,Java8中也引进了stream的函数式编程方式。另外React与Angular最大的不同是:React是以Javascript为中心,而Angular是以html为中心,一种是态语言,一种是展示语言,高下立现。 加群:460499457
首先,你需要在 React 项目中安装 echarts: ``` npm install echarts --save ``` 然后,在需要使用饼图的组件中引入 echarts,并在组件的生命周期函数 `componentDidMount` 中初始化 echarts 实例,并使用数据渲染饼图。 例如,以下是一个简单的饼图组件的代码: ``` import React, { Component } from 'react'; import echarts from 'echarts'; class PieChart extends Component { componentDidMount() { this.initChart(); } initChart = () => { const { data } = this.props; const chart = echarts.init(this.chartRef); chart.setOption({ tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)', }, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center', }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold', }, }, labelLine: { show: false, }, data, }, ], }); }; render() { return ( <div ref={(ref) => { this.chartRef = ref; }} style={{ width: '100%', height: '300px' }} /> ); } } export default PieChart; ``` 在上面的代码中,我们使用 `componentDidMount` 函数初始化 echarts 实例,并使用传递进来的数据渲染饼图。注意,我们在组件的 `render` 函数中返回一个 `div` 元素,这个元素的 `ref` 属性绑定了一个回调函数,用来获取这个元素的引用,以便后续使用 echarts 来渲染图表。 在父组件中,我们可以使用以下代码来渲染这个饼图组件: ``` import React, { Component } from 'react'; import PieChart from './PieChart'; class App extends Component { state = { data: [ { value: 335, name: '直接访问' }, { value: 310, name: '邮件营销' }, { value: 234, name: '盟广告' }, { value: 135, name: '视频广告' }, { value: 1548, name: '搜索引擎' }, ], }; render() { const { data } = this.state; return ( <div> <PieChart data={data} /> </div> ); } } export default App; ``` 在父组件中,我们传递一个 `data` 属性给饼图组件,这个属性包含了用于渲染饼图的数据。最终,我们可以在页面中看到一个简单的饼图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wsgodlike

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值