本文概述
- 1.安装React Calendar Heatmap
- 2.添加默认样式表
- 3.实施你的第一个热图
如果你愿意在ReactJS项目中实现这样的图表, 我们将向你展示如何使用React Calendar Heatmap组件来实现它。
1.安装React Calendar Heatmap React日历热图允许你嵌入svg日历热图组件, 其灵感来自github的贡献图。该组件可以扩展到容器大小, 并且可以进行超级配置。
要在你的项目中安装此组件, 请打开一个新终端, 切换到项目的目录并运行以下命令进行安装:
npm install react-calendar-heatmap
安装后, 你将能够使用react-calendar-heatmap将组件导入代码中。有关此组件的更多信息, 请不要忘记在Github上访问其官方存储库。
2.添加默认样式表 【在ReactJS中创建日历热图图表(Github Contribution Like)】第二步, 你需要加载CSS的主要结构, 该结构将为组件提供热图结构。你可以使用免费的CDN:
<
!-- Main CSS of heatmap -->
<
link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/patientslikeme/react-calendar-heatmap/d0a7d802/src/styles.css">
或从存储库下载styles.css文件的副本, 然后使用JS(通过导入)或使用< link> 标记将其添加到项目中。
更改热图颜色
要定义热图的颜色, 有必要通过加载新的CSS文件或仅在HTML模板中创建样式块来添加一些额外的CSS。共有4条规则定义每种刻度尺的颜色:
.react-calendar-heatmap .color-scale-1 { fill: #d6e685;
}.react-calendar-heatmap .color-scale-2 { fill: #8cc665;
}.react-calendar-heatmap .color-scale-3 {fill: #44a340;
}.react-calendar-heatmap .color-scale-4 { fill: #1e6823;
}
3.实施你的第一个热图 最后, 将热图包括在视图中所需要做的就是导入组件并提供所需的属性以对其进行初始化。作为基本点, 你需要提供将要呈现的数据, 此数据需要存储在数组内, 并且每次都是具有单个属性(即日期)的文字对象。此日期为字符串形式, 必须能够由JavaScript的Date类和一个count属性来解释, 该属性指示日期上的项目数量。同样, 你需要提供将在图形中显示的天数, 在这种情况下, 我们将显示整年(365天)。如前所述, 图表会进行扩展以适合父容器, 因此我们将其包装在宽度为700px的div中:
import React from 'react';
// Import the calendarheatmapimport CalendarHeatmap from 'react-calendar-heatmap';
export default class App extends React.Component {constructor(props, context) {super(props, context);
this.state = {// Some dates to render in the heatmapvalues: [{ date: '2016-01-01', count: 4 }, { date: '2016-01-22', count: 1 }, { date: '2016-01-30', count: 3 }, { date: new Date(2016, 0, 4)}], // How many days should be shownnumDays: 365}this.onClick = this.onClick.bind(this);
} onClick(value) {console.log(value);
}render() {return (<
div style={{width: 700}}>
<
CalendarHeatmapendDate={new Date('2017-01-01')}numDays={this.state.numDays}values={this.state.values}onClick={this.onClick}/>
<
/div>
);
}}
结果, 使用一些虚拟数据, 该组件将呈现一个简单的图表。如果你愿意进行测试, 则可以制作一个随机的日期生成器来填充日历, 因此, 你可以提供此方法作为返回带有伪数据的数组的值, 而不是提供带有日期的数组:
function getDummyDates(from, to, numberDates) {numberDates = numberDates || 50;
let result = [];
for(let i = 0;
i <
numberDates;
i++){result.push({date: new Date(from.getTime() + Math.random() * (to.getTime() - from.getTime())), count: Math.floor(Math.random() * 6)});
}return result;
}this.state = {// Some dates to render in the heatmapvalues: getDummyDates(new Date(2016, 0, 1), new Date(2017, 2, 1), 500), // How many days should be shownnumDays: 365};
结果图表如下所示:
文章图片
编码愉快!
推荐阅读
- 如何在Django中的视图和模板中格式化日期时间对象
- 如何使用Lena.js使用JavaScript向浏览器中的图像添加图像滤镜(照片效果)
- 如何解决Puppeteer TimeoutError(导航超时超过30000 ms)
- 使用appJar(基于Tkinter的UI)使用Python创建非常简单的图形用户界面
- 如何在Windows中使用pyinstaller从Python脚本创建可执行文件(.exe)
- 如何使用浏览器中的JavaScript从剪贴板检索图像
- 如何使用JavaScript将PDF转换为文本(从PDF提取文本)
- 使用浏览器工具或创建自己的基准来使用JavaScript衡量功能的性能
- 如何在浏览器中使用JavaScript创建Gameboy Advance Emulator(GBA)