Прежде всего, я не рекомендую вам использовать анонимные функции для установки в качестве прослушивателей событий, потому что в этом случае вы не сможете removeEventListener
или что-то подобное (возможно, потому что не ясно, что такое map
здесь).
Во-вторых, вам не следует связывать свой dataHandler
, потому что это уже функция со стрелкой, поэтому проблем с this
в контексте dataHandler
нет. То, что вы должны связать, это ваш ручной регистратор событий. Таким образом, код результата должен выглядеть следующим образом:
constructor(props){
super(props)
this.state = {
selActive: 4,
loaded: false,
mapInfo: ''
}
this.onScriptLoad = this.onScriptLoad.bind(this)
this.dataHandler = this.dataHandler.bind(this)
this.handleMouseOver = this.handleMouseOver.bind(this)
}
dataHandler = (getJson) => {
fetch(getJson)
.then(response => response.json())
.then(featureCollection =>
dataLayer = map.data.addGeoJson(featureCollection)
);
map.data.addListener('mouseover', this.handleMouseOver);
}
handleMouseOver(event) {
map.data.revertStyle();
map.data.overrideStyle(event.feature, {fillColor: 'blue'});
this.setState({mapInfo: event.feature.countryNL})
}
или, используя функцию стрелки, которая автоматически связывается:
constructor(props){
super(props)
this.state = {
selActive: 4,
loaded: false,
mapInfo: ''
}
this.onScriptLoad = this.onScriptLoad.bind(this)
this.dataHandler = this.dataHandler.bind(this)
}
dataHandler = (getJson) => {
fetch(getJson)
.then(response => response.json())
.then(featureCollection =>
dataLayer = map.data.addGeoJson(featureCollection)
);
map.data.addListener('mouseover', this.handleMouseOver);
}
handleMouseOver = (event) => {
map.data.revertStyle();
map.data.overrideStyle(event.feature, {fillColor: 'blue'});
this.setState({mapInfo: event.feature.countryNL})
}
Надеюсь, это поможет вам! :)