Ich versuche in der aktuellen Version 4 meinen Kopf um d3 zu bekommen. Konkret: Ich versuche die x-Achse für ein einfaches Liniendiagramm in react und es6 zu erstellen.d3 v4 + reagieren + ES6: Wie programmatisch Achse erstellen?
Ich habe die Beispiele von Mike Bostock gesehen und wie er es tut:
svg.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
Aber das ist weder reagieren noch ES6.
Auf einer anderen Seite, die ich die folgende Variante gesehen haben:
renderAxis() {
var node = this.refs.axis;
var axis = d3.svg.axis().orient(this.props.orient).ticks(5).scale(this.props.scale);
d3.select(node).call(axis);
}
render() {
return <g className="axis" ref="axis" transform={this.props.translate}></g>
}
Dies ist reagieren und ES6 aber nicht 4.
in Version d3 Ich könnte versuchen, die Version 3-Code auf Version 4 von verabschieden d3 aber: Der d3.select stört mich extrem. Ich möchte keine DOM-Aufrufe machen, wenn ich react (oder eine andere Bibliothek innerhalb von, wie d3) verwende. React sollte verwendet werden, um in das DOM auf die effizienteste Weise zu rendern, nicht um DOM-Knoten zu erhalten.
Also, meine Frage ist: Was ist die Reaktion-Weg, um mir eine einfache X-Achse zu erstellen? Oder, wenn es noch keine solche Antwort gibt: Was ist der reaktive Weg, den zitierten Code von Mike Bostock zu übernehmen?
Wenn Sie möchten, dass d3 die Achse rendert, dann müssen Sie es so machen, wie Ihre zweiten Beispiele zeigen - indem Sie die Achse ' 'repetieren und dann den DOM-Aufruf' renderAxis()' von 'componentDidUpdate' abgleichen .Es ist verständlich, warum Sie diesen Ansatz nicht mögen, aber es ist nicht der falsche Ansatz per se; Dieses Szenario ist wahrscheinlich der Hauptgrund, warum 'componentDidUpdate' existiert. Wenn Sie dies nicht tun möchten, müssen Sie einen eigenen JSX schreiben, der die DOM-Elemente erstellt, positioniert und formatiert, die d3 axis erstellt hätte. –
meetamit