import “echarts/lib/component/title”;
import “echarts/lib/component/tooltip”;
import “echarts/lib/component/legend”;
import ‘echarts/lib/component/polar’;
class App extends Component { // 初始化状态
state = {
sourceData: [],
};
async componentDidMount() {
let data = [];
for (let i = 0; i <= 100; i++) {//根据公式,生成绘制在图上的坐标数据源数组
let theta = i / 100 * 360;
let r = 5 * (1 + Math.sin(theta / 180 * Math.PI));
data.push([r, theta]);
}
this.setState(() => {
return {
sourceData: data//更新react组件的state数据
};
});
// 初始化Echarts实例,将其挂载到id为main的dom元素上展示
let myChart = echarts.init(document.getElementById(“main”));
// 绘制Echarts实例所需要的数据
myChart.setOption({
title: {
text: ‘极坐标双数值轴’
},
legend: {
data: [‘line’]
},
polar: {},
tooltip: {
trigger: ‘axis’,
axisPointer: {
type: ‘cross’
}
},
angleAxis: {
type: ‘value’,
startAngle: 0
},
radiusAxis: {
},
series: [{
coordinateSystem: ‘polar’,//极坐标图
name: ‘line’,
type: ‘line’,
data: data //根据已生成的坐标数组来绘制爱心图形
}]
}
);
}
render() {//渲染需要陈放Echart实例的容器元素
return <div id = “main” style = { { width: 1000, height: 600 }}> ;
}
}
export default App;
#### **2、南丁格尔玫瑰图实现数据展示**
**最终实现效果**

**思路分析**
1.创建一个React组件,并且需要组件内的状态state,render函数,componentDidMount钩子
2.render函数渲染需要容纳Echart实例的容器元素,并需要声明id,方便Echarts实例找到挂载的目标
3.设置组件内的状态state,定义sourceData存放Echarts实例的数据源
3.componentDidMount钩子,当render函数渲染完容器元素之后调用,主要作用如下:
1)初始化Echarts实例,将其挂载到id为main的div元素上
2)通过myChart.setOption(obj)将需要展示的数据包括state的数据data,celldata,整合成一个obj对象,并绘制图表。
**demo源码**
import React, {
Component
} from “react”;
// 引入ECharts主模块
import * as echarts from “echarts/lib/echarts”;
// 引入饼状图需要的模块
import “echarts/lib/chart/pie”;
import “echarts/lib/component/title”;
import “echarts/lib/component/tooltip”;
import “echarts/lib/component/legend”;
class App extends Component { // 初始化状态
state = {
data: [
{value: 150, name: ‘语文’},
{value: 110, name: ‘物理’},
{value: 150, name: ‘数学’},
{value: 100, name: ‘化学’},
{value: 150, name: ‘英语’},
{value: 90, name: ‘生物’},
],
celldata:[‘语文’, ‘物理’, ‘数学’, ‘化学’, ‘英语’, ‘生物’]
};
async componentDidMount() {
var myChart = echarts.init(document.getElementById("main"));
myChart.setOption(
{
title: {
text: '高考理科分数占比',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
left: 'center',
top: 'bottom',
data: this.state.celldata
},
toolbox: {
show: true,
feature: {
mark: {show: true},
dataView: {show: true, readOnly: false},
magicType: {
show: true,
type: ['pie', 'funnel']
},
restore: {show: true},
saveAsImage: {show: true}
}
},
series: [
{
name: '分数',
type: 'pie',
radius: [30, 110],
center: ['50%', '50%'],
roseType: 'area',
data: this.state.data
}
]
}
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线
作者徽是vip1024c
图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!