TypeScript 语言 绘制仪表盘展示关键业务指标

TypeScript阿木 发布于 15 天前 5 次阅读


TypeScript 语言下的仪表盘展示关键业务指标实现

在当今的数据驱动时代,企业需要实时监控关键业务指标(KPIs)以做出快速决策。TypeScript 作为一种静态类型语言,以其强大的类型系统和良好的兼容性,在构建现代前端应用中越来越受欢迎。本文将探讨如何使用 TypeScript 和相关技术栈来创建一个仪表盘,用于展示关键业务指标。

技术栈

为了实现仪表盘,我们将使用以下技术栈:

- TypeScript:用于编写类型安全的代码。
- React:用于构建用户界面。
- Chart.js:用于绘制图表。
- Axios:用于从后端API获取数据。

项目结构

以下是项目的基本结构:


dashboard/
├── src/
│ ├── components/
│ │ ├── Dashboard.js
│ │ ├── Chart.js
│ │ └── KpiCard.js
│ ├── utils/
│ │ └── api.js
│ ├── App.tsx
│ └── index.tsx
├── package.json
└── tsconfig.json

安装依赖

我们需要安装必要的依赖:

bash
npm install react react-dom chart.js axios

编写 TypeScript 代码

1. 定义数据模型

在 `src/utils/api.ts` 中,我们定义了获取数据的接口:

typescript
import axios from 'axios';

interface Kpi {
id: number;
name: string;
value: number;
trend: 'up' | 'down';
}

const API_URL = 'https://api.example.com/kpis';

export const fetchKpis = async (): Promise => {
const response = await axios.get(API_URL);
return response.data;
};

2. 创建图表组件

在 `src/components/Chart.tsx` 中,我们使用 Chart.js 创建一个图表组件:

typescript
import React from 'react';
import { Line } from 'react-chartjs-2';

interface ChartProps {
data: any;
options: any;
}

const Chart: React.FC = ({ data, options }) => {
return ;
};

export default Chart;

3. 创建 KPI 卡片组件

在 `src/components/KpiCard.tsx` 中,我们创建一个展示单个 KPI 的卡片组件:

typescript
import React from 'react';

interface KpiCardProps {
kpi: Kpi;
}

const KpiCard: React.FC = ({ kpi }) => {
return (

{kpi.name}

{kpi.value}

{kpi.trend}

);
};

export default KpiCard;

4. 创建仪表盘组件

在 `src/components/Dashboard.tsx` 中,我们创建一个仪表盘组件,它包含多个 KPI 卡片和一个图表:

typescript
import React, { useEffect, useState } from 'react';
import { fetchKpis } from '../utils/api';
import Chart from './Chart';
import KpiCard from './KpiCard';

interface DashboardProps {}

const Dashboard: React.FC = () => {
const [kpis, setKpis] = useState([]);

useEffect(() => {
const loadKpis = async () => {
const data = await fetchKpis();
setKpis(data);
};

loadKpis();
}, []);

return (

{kpis.map((kpi) => (

))}
kpi.name),
datasets: [
{
label: 'KPI Values',
data: kpis.map((kpi) => kpi.value),
fill: false,
borderColor: 'rgb(75, 192, 192)',
tension: 0.1,
},
],
}}
options={{
scales: {
y: {
beginAtZero: true,
},
},
}}
/>