我正在使用带有React的Leaflet离线地图,我在世界上每个国家/地区手动加载countries.js
GeoJSON文件。然后,我根据从this.props.data
收到的数据有条件地为每个国家/地区着色,该数据最初有效。
然而,问题来自于新this.props.data
进入时更新颜色。
我试过在这两个组件中管理它:
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);
}
}
},
我做错了什么?满足条件,如果旧数据与新数据不匹配,则地图应使用clearLayers();
清除所有图层。如果无法找到地图,我可以理解这个错误;但是我使用this.map
访问它,所以它似乎不是一个范围问题。
答案 0 :(得分:4)
clearLayers()
是a method of L.LayerGroup
,不是 L.Map
的方法。
存储您在运行L.GeoJson
时创建的L.geoJson(...)
实例,并对其在地图中添加/删除的时间进行更精细的控制。