Ich benutze d3 mit React und habe einige d3 Funktionen, die Zugriff auf ein paar d3 Variablen/Objekte benötigen. Ich muss eine dieser Funktionen aufrufen, wenn componentWillReceiveProps() aufgerufen wird. Ich habe ein minimales Beispiel gegeben, die Kommentare sind das Wichtigste.Aufruf von 3rd Party Lib Funktionen in React
class App extends Component {
constructor() {
super();
}
shouldComponentUpdate() {
return false;
}
componentWillReceiveProps(nextProps) {
/* Need to call reset() here */
}
componentDidMount() {
let svg = d3.select(this.refs.map).append('svg')
.attr('width', width)
.attr('height', height);
let g = svg.append('g')
.style('stroke-width', '.4px');
function reset() {
/* needs access to g */
g.transition()
.duration(1500)
.style('stroke-width', '.4px')
.attr('transform', '');
}
}
render() {
return (
<div id="map" ref="map"></div>
)
}
}
brauchen wir nicht 'this.g' mit dem Anfangswert im Konstruktor wie' this.g = null‘zu erklären? –
@GaleelBhasha, wir können Code selbstdokumentierter machen, aber es ist nicht notwendig. Nachdem die Komponente gemountet wurde, werden wir 'this.g' einen Wert zuweisen. Die 'componentWillReceiveProps'-Funktion kann nicht vor' componentWillMount' aufgerufen werden. Wenn wir also reset aufrufen, ist 'this.g' nicht undefiniert. – 1ven
Müssen wir die 'this' Referenz an den 'reset' binden? In diesem Beispiel - https://jsbin.com/lozolarure/edit?js,output Wenn ich auf die Schaltfläche zum Zurücksetzen klicken, erhalte ich den folgenden Fehler 'Uncaught TypeError: Kann Eigenschaft 'Übergang' von undefined nicht lesen hinzufügen Wenn ich die 'reset()' -Deklaration in 'reset =() => {}' ändere oder 'this.reset = this.reset.bind (this)' am Konstruktor hinzufüge, funktioniert das für mich. In der Demo starte ich das 'reset' von der 'render()' Methode. Ich hoffe, das wird gleich sein, wenn 'Reset' von 'componentWillReceiveProps()' aufgerufen wird - ist meine Annahme richtig? –