Ich verwende eine Leaflet-Offline-Map mit React, wo ich manuell eine countries.js
GeoJSON-Datei mit jedem Land der Welt lade. Ich färbe dann jedes Land abhängig von Daten, die von this.props.data
empfangen werden, die anfänglich funktioniert.Leaflet-Fehler: ClearLayers ist keine Funktion
Jedoch kommt die Frage aus, die Farben zu aktualisieren, wenn neue this.props.data
in kommt
Ich habe versucht, es in diesen beiden Komponenten zu verwalten:.
componentWillReceiveProps(nextProps) {
if(this.props.data) {
let map = this.map;
console.log(map); // It shows the leaflet object!
console.log(nextProps.data); // It's logged
console.log(this.props.data); // Also logged
if (nextProps.data !== this.props.data) {
map.clearLayers(); // Error comes here?
console.log("New data doesn't match old!"); // This logs correctly
}
}
},
componentDidUpdate(prevProps, prevState) {
if(this.props.data){
let map = this.map;
if (prevProps.data !== this.props.data) {
L.geoJson(this.countries, { // from import
}).addTo(map);
}
}
},
Was mache ich falsch? Die Bedingung ist erfüllt, wenn die alten Daten nicht mit den neuen übereinstimmen, sollte die Karte alle Schichten mit clearLayers();
löschen. Ich könnte diesen Fehler verstehen, wenn die Karte nicht gefunden werden konnte; aber ich greife darauf mit this.map
, so scheint es nicht ein Problem zu sein.
Sicher, dass 'clearLayers()' Funktion existiert? Überprüfen Sie die Rechtschreibung möglicherweise könnte es ein Rechtschreibfehler sein. –
'ClearLayers' ist Methode der [LayerGroup] (http://leafletjs.com/reference-1.0.3.html#layergroup-clearlayers) nicht von der Karte – xmojmr
Scheint wie du hast Recht, ich muss den Geojson objektivieren Daten und führen Sie clearLayers mit 'this' aus, um Scoping-Einschränkungen zu vermeiden. – cbll