React Antv G2Plot 「指标拆解图」 前端可视化实战 实现渲染、重置、筛选功能

背景

实现对指定数据的「指标拆解图」 渲染,并且可以根据筛选项进行变化。
在这里插入图片描述
在这里插入图片描述

任务分解

  • antv 的图表,以及请求后端的载荷对传入的数据结构有严格要求
    • 一个工具函数将后端接口返回的数据格式化成 antv 图表要求的格式
    • 一个工具函数将前端提交的请求数据格式化后端提供的接口规范形式。
  • 刚进入页面图表需要有个初始状态的渲染
    • 可以用 useModel 实现初始化的值
  • 完成筛选、重置功能
    • 结合 form 以及 umi 的 request 实现

代码实现

import { fetchXXXGroup } from '@/services/XXX';
import { DecompositionTreeGraph } from '@ant-design/graphs';
import { Button, Card, Form } from 'antd';
import { useState } from 'react';
import { useModel } from 'umi';interface XXXGraphType {id: string;value?: {title?: string;items?: {text?: string;value?: string;}[];};children?: XXXGraphType[];
}
// 格式化处理后端接口返回值 使其符合 Antv 基本要求
const toGraphData = (data: any[]) => {const basicData: any = data.map(({name,XXX_id,XXX_level,children,name,count,}) => ({id: XXX_level + '#' + XXX_id,value: {title: XXX_name,items: [{ text: name, value: count + '人' }],},children: toGraphData(children),}),);return basicData;
};const DepartmentOverviewTree = () => {const [form] = Form.useForm();const [loading, setLoading] = useState(false);const rawData: any = useModel('useXXX');const dataXXX: object[] = rawData.XXX;const formattedData:XXXGraphType = toGraphData(dataXXX);const initialData = {id: 'root',value: {title: ' XXX概览图',},children: formattedData,};const [data, setData] = useState<any>(initialData);const onReset = () => {form.resetFields();onFinish()};
// 格式化前端提交数据const formatForm = (params: any) => {const { address, xxx, ...props } = params || {};return {address: address ? address.join(',') : undefined,xxx: xxx ? xxx.map((arr: any) => arr.join('#')).join(',') : undefined,...props,};};const onFinish = async () => {setLoading(true);try {const { data } = await fetchXXXGroup({...formatForm(form.getFieldsValue()),});const { depts } = data || {};if (Array.isArray(depts)) {const basicData = toGraphData(depts)const formattedData = {id: 'root',value: {title: 'XXX概览图',},children: basicData,}setData(formattedData);}} finally {setLoading(false);}};const config: any = {data: data,layout: {direction: 'TB',ranksepFunc: () => 20,},nodeCfg: {size: [120, 20],type: 'indicator-card',anchorPoints: [[0.5, 0],[0.5, 1],],autoWidth: true,items: {style: (cfg: any, group: any, type: string | number) => {const styles = {value: {padding: 2,},};// @ts-ignorereturn styles[type];},},},markerCfg: (cfg: any) => {const { children, id } = cfg;return {show: id !== 'root' && children?.length,position: 'bottom',animate: false,};},edgeCfg: {type: 'polyline',},animate: false,autoFit: true,fitCenter: true,};return (<><Card style={{ marginBottom: '20px' }}><Form layout="inline" onFinish={onFinish} form={form}><Form.Item label="address:" name="address"><AddressSelect mode="multiple" style={{ width: '200px' }} /></Form.Item><Form.Item label="XXX:" name="XXX"><DepartmentSelect style={{ width: '200px' }} /></Form.Item><Form.Item labelAlign="right"><Button onClick={onReset} style={{ marginLeft: '300px' }}>重置</Button></Form.Item><Form.Item labelAlign="right"><Button type="primary" htmlType="submit">查询</Button></Form.Item></Form></Card><Card><DecompositionTreeGraph {...config} /></Card></>);
};export default DepartmentOverviewTree;

其他

获取图表实例

一、onReady 回调

import React from 'react';
import { Line } from '@ant-design/charts';const Page: React.FC = () => {const data = [];const config = {};return <Line {...config} onReady={(chart) => console.log(chart)} />;
};export default Page;

二、挂载到 ref 上

import React from 'react';
import { Bar } from '@ant-design/charts';const Page: React.FC = () => {const data = [];const config = {};const ref = React.useRef();React.useEffect(() => {console.log(ref.current.getChart());}, []);return <Bar {...config} ref={ref} />;
};export default Page;

注意

Antv DecompositionTreeGraph 指标拆解图的 data 数据源是「对象」不是「对象数组」,后端接口返回的值一般是带有多个字段的对象数组,处理时注意最后要变成严格遵循下面格式的
「对象」类型

interface XXXGraphType {id: string;value: {title: string;items: {text: string;value?: string;}[];};children: XXXGraphType[];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity数据可视化图表插件XCharts3.0发布

Unity数据可视化图表插件XCharts3.0发布 历时8个多月&#xff0c;业余时间&#xff0c;断断续续&#xff0c;XCharts3.0 总算发布了。如果要打个满意度&#xff0c;我给 3.0 版本来个80分。 对于代码框架结构设计的调整改动&#xff0c;基本符合预期&#xff0c;甚是满意。相比…

成为一名成熟优质的亚马逊运营,这几个能力你必须具备

亚马逊&#xff0c;目前全球最大的跨境电商平台&#xff0c;是真正意义上的全球电商鼻祖。亚马逊一年的销售规模接近或者超过1000亿美元亿以上&#xff0c;据数据显示&#xff0c;亚马逊是回购率最高的电商平台。说它是全球在线零售之王&#xff0c;也毫不为过。 面对这样一个充…

武汉星起航:深度剖析个人卖家在亚马逊上开店的流程

亚马逊是一个比较受欢迎的跨境电商平台&#xff0c;部分卖家想在亚马逊上开店&#xff0c;但是不知道开店流程。下面星起航将为大家介绍一下个人卖家怎么在亚马逊上开店&#xff0c;主要包括以下几个步骤&#xff1a; 创建亚马逊账户&#xff1a;访问亚马逊官网&#xff0c;点击…

进来看新手该怎么选择自己的第一个平台——shopee、lazada、速卖通版

很多新手在刚刚接触跨境电商的时候&#xff0c;都会卡在第一步选平台的问题。大家也逐渐开始意识到大平台其实不适合新手入局了&#xff0c;已经是大卖家们的市场。而且欧美市场最近也不太好做&#xff0c;开始把目光投向东南亚这边&#xff0c;今天龙哥就打算从三个东南亚市场…

亚马逊运营的三大关联销售入口你都清楚吗?

从亚马逊平台用户体验出发&#xff0c;你会发现&#xff0c;关联流量是非常重要的。 亚马逊关联流量和消费者的购买路径、消费者的流量路径、消费者购买习惯有关&#xff0c;另外与卖家站内广告投放也会影响关联结果。 对于亚马逊平台来说&#xff0c;将更多的产品推荐给消费…

亚马逊运营知识:亚马逊排名规则是怎么样的

亚马逊作为全球最大的电子商务平台&#xff0c;市场份额非常大&#xff0c;容易赚到钱。所以国内很多卖家都喜欢在亚马逊平台开店。电商平台&#xff0c;产品排名越高就越有优势&#xff0c;所以卖家都需要非常了解亚马逊排名规则。今天海熹跨境人才网就来给大家说说亚马逊排名…

星淘惠告诉你跨境平台那么多,凭什么要选亚马逊?

星淘惠告诉你跨境平台那么多&#xff0c;凭什么要选亚马逊&#xff1f; 在这个互联网高速发展的时代&#xff0c;电商似乎是应运而生&#xff0c;也好像是时代的必然产物。 随着国内电商不断壮大甚至早已是饱和状态&#xff0c;加上国家在跨境商务发展上大力支持&#xff0c…

重磅消息 | 2023年最新全栈测试开发技能实战指南V2.0(第4期)

第4期首日发文后&#xff0c;收到了一些学员的建议反馈&#xff0c;做了些许调整 &#xff0c;最新官宣文以此篇为准&#xff01; 官宣&#xff0c;第四期&#xff0c;强势回归&#xff01; 1. 最近半年发生了哪些事&#xff1f; 时间匆匆&#xff0c;不经意间&#xff0c;2023…

跨境电商独立站多语言,fecify saas商城解决方案

跨境独立站&#xff0c;面向的是全球国家&#xff0c;每个国家都有自己的语言&#xff0c;譬如&#xff1a;英语&#xff0c;德语&#xff0c;法语&#xff0c;俄语&#xff0c;西班牙语&#xff0c;葡萄牙语&#xff0c;韩语&#xff0c;日语&#xff0c;阿拉伯语&#xff0c;…

2023年跨境电商独立站口碑营销攻略,值得借鉴

2023年&#xff0c;随着全球经济的不断发展和跨境电商的日益普及&#xff0c;越来越多的电商企业开始重视口碑营销。一方面&#xff0c;口碑可以让消费者更加信任和认可品牌&#xff0c;提高转化率和留存率&#xff1b;另一方面&#xff0c;口碑也可以帮助电商企业建立品牌形象…

跨境人必须了解:7种跨境电商营销推广理念

你是否正在寻找新的方式来推广你的电商业务&#xff1f;如果是这样的话&#xff0c;你可以阅读我为你列出的7种电子商务促销理念&#xff0c;并使用这些理念来在线宣传你的产品和线上商店&#xff1a; 1. 关注客户体验 第一个电商促销策略首先是关注客户体验。推广你的业务的最…

跨境电商推广干货:掘金东南亚和这几个推广平台

做跨境电商推广需要了解&#xff1a;东南亚成为了世界上电商销售增长最快的地区&#xff01; 2022年东南亚电子商务销售额将达到896.7亿美元&#xff0c;比去年增加153.1亿美元。到明年&#xff0c;该地区将突破1000 亿美元大关&#xff0c;与2019 年的372.2 亿美元相去甚远。…

如何让社交媒体成为跨境电商驱动力?这款独立站工具不能错过!

社交媒体已成为大约 10 年的主要信息来源。60% 的买家在全球范围内在线搜索产品和服务&#xff08;根据 Business Insider&#xff0c;2018 年&#xff09;。那么&#xff0c;十多年来&#xff0c;为什么社交网络成为最热门的营销渠道&#xff1f;主要原因为—— 它们&#xf…

6种交互式内容创意帮助跨境电商卖家提高独立站商店知名度

关键词&#xff1a;跨境电商卖家、独立站商店 交互式内容是一种允许用户与之交互的内容。一些示例包括在线投票、问答环节、交互式视频和交互式计算器等交互式工具。此内容类型允许查看者通过单击或拖动项目来自定义显示方式和内容。内容还可以引导读者采取您想要的操作&#x…

跨境电商怎么用Facebook引流—扬帆际海

今天扬帆际海给大家讲一讲怎么通过Facebook引流&#xff0c;现在跨境电商引流除了运营还有通过社交媒体引流&#xff0c;比如facebook&#xff0c;今天扬帆际海就来聊一聊怎么来引流。   &#xff08;1&#xff09;仔细管理你自己的内容。帖子可以使用引人注目的标题来激发读…

跨境电商独立站海外引流渠道:Quora运营技巧

Quora产品名称取自于“Question or answer”的几个首字母“QuoraQuora”。我们从其产品名称上非常明显看到Quora是做问答的社区。 Quora建立了一个系统&#xff0c;用户可以通过对内容投票来决定内容的质量。当用户创建或消费内容时&#xff0c;他们会获得一种参与感。所以只要…

微软365 Copilot重磅更新:新增语义索引,自动生成PPT图片

&#xff08;本文阅读时间&#xff1a;4 分钟&#xff09; 北美时间5月9日&#xff0c;微软对Microsoft 365 Copilot新增多个功能并推出抢先体验计划。 今年3月&#xff0c;微软将ChatGPT集成在产品矩阵中并推出了Microsoft 365 Copilot&#xff0c;受到了全球的关注&#xff0…

【Prompt Engineering 教程:写 Prompt 的艺术】2、Prompt 的基本原则与建议、场景最佳实践

【Prompt Engineering 教程:写 Prompt 的艺术】2、Prompt 的基本原则与建议、场景最佳实践 文章目录 【Prompt Engineering 教程:写 Prompt 的艺术】2、Prompt 的基本原则与建议、场景最佳实践Prompt 原则与建议建议使用最新的模型Prompt 里最好包含完整的信息Prompt 最好简洁…

昆仑万维或将引领国内 AIGC 技术发展

AIGC 发展历程 如果说 2021 年是元宇宙元年&#xff0c;那么 2022 年绝对可以称作 AIGC 元年。自从 Accomplice 于 2021 年 10 月推出 Disco Diffusion 以来&#xff0c;AIGC 受到了前所未有的关注&#xff0c;相关产品和技术更是以井喷之势快速更新迭代。 AIGC&#xff08;A…

【NLP】最近有关 AI 和 NLP 新闻

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…