2016-07-07 7 views
2

이것은 일반적인 JS 질문입니다.JS bind(), 두 개의 "this"컨텍스트가 필요합니다.

React-leaflet에서 콜백을 통해 이벤트를 처리하고 싶습니다. 호출 된 함수는 this.getZoom()과 같은 작업을 수행하는 데 사용할 수있는 호출자 (이벤트) 컨텍스트를 가져옵니다.

문제는 동시에 반응 요소 컨텍스트가 상태를 업데이트하고 다른 방법을 호출해야합니다.

"this.setState (...)"를 얻기 위해 "this.getZoom()"을 호출하려면 콜백이 바인드되지 않아야합니다. "this"에 콜백을 바인딩해야합니다.

그러나 호출자와 콜백 컨텍스트를 변수로 콜백에 전달하는 방법은 무엇입니까?

다른 유형으로이 문제가 해결 될 수 있습니까?

이 jsfiddle를 참조하십시오 https://jsfiddle.net/nf8k23s7/1/

+0

이벤트의 컨텍스트를 캡처하는 방법을 알아 내면 moveend.bind (eventContext, this)를 수행 할 수 있습니다. 그리고 그것은 그 문제를 해결할 것입니다. – Aus

답변

4

e.target 이미 리플릿 요소입니다.

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

업데이트하여 바이올린 : 바인드에 https://jsfiddle.net/mrlew/nf8k23s7/2/

+0

고마워요! 나는 모든 것을 시도했다고 생각했습니다 (손바닥 얼굴). – Aus

2

또한 사용할 수 있습니다 => 화살표 기능 결합을

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

을하고 잊지 마세요 :

그래서 당신은 사용할 수 있습니다 이

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


<Map center={position} zoom={this.state.zoom} onMoveend={this.moveend}> 
+1

아, 그게이 "= (e) =>"닌자 의미 :) 팁 주셔서 감사합니다. – Aus

+0

당신을 환영합니다! :) –