2

这是一个通用的 JS 问题。

在 React-leaflet 中,我想通过回调处理事件。被调用函数获取调用者(事件)上下文,该上下文可用于执行 this.getZoom() 之类的操作。

onMoveend={this.moveend}

moveend(e){
    // e is the event target
    var zoomText = this.getZoom();
    // this.setState({zoomText: zoomText});  <-- "this" is the map object, not the my React component.
}

问题是同时我需要反应元素上下文来更新状态并调用其他方法。

要实现“this.getZoom()”,不应绑定回调,要实现“this.setState(...)”,我需要将回调绑定到“this”。

但是如何将调用者和回调上下文作为变量传递给回调呢?

或者可能是这种类型的问题以另一种方式解决?

看到这个jsfiddle:https ://jsfiddle.net/nf8k23s7/1/

4

2 回答 2

4

e.target已经是 Leaflet 元素。

所以你可以使用:

moveend(e){
    var zoomText = e.target.getZoom();
    this.setState({zoomText: zoomText});
}

不要忘记做绑定:

<Map center={position} zoom={this.state.zoom} onMoveend={this.moveend.bind(this)}>

更新了你的小提琴:https ://jsfiddle.net/mrlew/nf8k23s7/2/

于 2016-07-07T09:02:41.357 回答
2

你也可以使用 => 箭头函数来绑定 this

moveend = (e) => {
  var zoomText = e.target.getZoom();
  this.setState({zoomText: zoomText}); 
}


<Map center={position} zoom={this.state.zoom} onMoveend={this.moveend}>
于 2016-07-07T09:14:58.783 回答