- 基于 React 和 d3.js,第一步是将数据绑定到 React 组件中的 state 中,然后将该 state 传递给 d3 包装的 barChart 组件。
- 数据传递后,barChart 组件将数据解构为 X 轴和 Y 轴坐标。要更新 barChart,请先更新 React state 中的数据。setState() 方法可以在数据被更改时触发 React 组件的重新渲染。
- 重新渲染后,d3 包装的 barChart 组件会自动更新并呈现新的数据。
示例代码:
import React, { Component } from 'react';
import * as d3 from 'd3';
import './BarChart.css';
class BarChart extends Component {
componentDidMount() {
this.createBarChart();
}
componentDidUpdate() {
this.updateBarChart();
}
createBarChart() {
const node = this.node;
const data = this.props.data;
const margin = {top: 20, right: 20, bottom: 30, left: 40};
const width = this.props.width - margin.left - margin.right;
const height = this.props.height - margin.top - margin.bottom;
const x = d3.scaleBand().rangeRound([0, width]).padding(0.1);
const y = d3.scaleLinear().rangeRound([height, 0]);
const g = d3.select(node)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain(data.map((d) => d.x));
y.domain([0, d3.max(data, (d) => d.y)]);
g.append("g")
.attr("class", "axis axis-x")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
g.append("g")
.attr("class", "axis axis-y")
.call(d3.axisLeft(y).ticks(10, "%"))
.append("text")
.attr("