import { registerShape, Chart, Axis, Tooltip, Coord, Point, Guide, Series } from 'viser-react'; import * as React from 'react'; registerShape('point', 'pointer', { draw(cfg, container) { let point = cfg.points[0]; // 获取第一个标记点 point = this.parsePoint(point); const center = this.parsePoint({ // 获取极坐标系下画布中心点 x: 0, y: 0 }); // 绘制指针 container.addShape('line', { attrs: { x1: center.x, y1: center.y, x2: point.x, y2: point.y + 15, stroke: cfg.color, lineWidth: 5, lineCap: 'round' } }); return container.addShape('circle', { attrs: { x: center.x, y: center.y, r: 9.75, stroke: cfg.color, lineWidth: 4.5, fill: '#fff' } }); } }); const GAUGE_MAX = 9; const GAUGE_MIN = 0; const scale = [{ dataKey: 'value', min: GAUGE_MIN, max: GAUGE_MAX, tickInterval: 1, nice: false }]; const color = ['#0086FA', '#FFBF00', '#F5222D']; export default class App extends React.Component { timer: any; state: { data: { value: number }[], trend: 'up' | 'down', } = { data: [{ value: 0, }], trend: 'up', }; componentDidMount() { this.timer = setTimeout(this.setData, 0); } componentWillUnmount() { if (this.timer) { clearTimeout(this.timer); } } setData = () => { if (this.timer) { clearTimeout(this.timer); } const delta = Math.random(); const prevVal = this.state.data[0].value; if (this.state.trend === 'up') { const nextVal = prevVal + delta; if (nextVal > 9) { this.setState({ trend: 'down' }); } else { this.setState({ data: [{ value: nextVal }] }); } } else { const nextVal = prevVal - delta; if (nextVal < 0) { this.setState({ trend: 'up' }); } else { this.setState({ data: [{ value: nextVal }] }); } } this.timer = setTimeout(this.setData, 1000); } render() { const { data } = this.state; const val = data[0].value; return (

合格率

${Math.ceil(val * 10)}%

`} /> ); } }