ReactJS 구성 요소 내에서 event.stopPropagation ()을 사용하여 클릭 이벤트가 버블 링되는 것을 막고 레거시 코드에서 JQuery와 함께 첨부 된 클릭 이벤트를 트리거하려고하는데 React의 stopPropagation ()이 이벤트로의 전파 만 중지하는 것 같습니다. 또한 React에 첨부되어 있으며 JQuery의 stopPropagation ()은 React로 첨부 된 이벤트에 대한 전파를 중지하지 않습니다.
이러한 이벤트에서 stopPropagation ()이 작동하도록하는 방법이 있습니까? 이러한 동작을 보여주기 위해 간단한 JSFiddle 을 작성했습니다 .
/** @jsx React.DOM */
var Propagation = React.createClass({
alert: function(){
alert('React Alert');
},
stopPropagation: function(e){
e.stopPropagation();
},
render: function(){
return (
<div>
<div onClick={this.alert}>
<a href="#" onClick={this.stopPropagation}>React Stop Propagation on React Event</a>
</div>
<div className="alert">
<a href="#" onClick={this.stopPropagation}>React Stop Propagation on JQuery Event</a>
</div>
<div onClick={this.alert}>
<a href="#" className="stop-propagation">JQuery Stop Propagation on React Event</a>
</div>
<div className="alert">
<a href="#" className="stop-propagation">JQuery Stop Propagation on JQuery Event</a>
</div>
</div>
);
}
});
React.renderComponent(<Propagation />, document.body);
$(function(){
$(document).on('click', '.alert', function(e){
alert('Jquery Alert');
});
$(document).on('click', '.stop-propagation', function(e){
e.stopPropagation();
});
});
stopImmediatePropagation
클레임 이벤트 리스너는 바인딩 된 순서대로 호출됩니다. React JS가 jQuery 이전에 초기화되면 (피들에있는 것처럼) 즉시 전파를 중지 할 수 있습니다.
componentDidMount
것이지만 예상치 못한 방식으로 다른 React 이벤트 핸들러를 방해 할 수 있습니다.
.stop-propagation
반드시 작동하지 않을 것임을 깨달았습니다 . 귀하의 예제는 이벤트 위임을 사용하지만 요소에서 전파를 중지하려고합니다. 리스너는 요소 자체에 바인딩되어야합니다 $('.stop-propagation').on('click', function(e) { e.stopPropagation(); });
. 이 바이올린을 방지 당신 같은 모든 전파하려고했던 : jsfiddle.net/7LEDT/6
event.nativeEvent.stopImmediatePropagation
하여 다른 이벤트 리스너가 실행되는 것을 방지 할 수 있지만 실행 순서는 보장되지 않습니다.