Bir tıklama olayının köpürmesini ve eski kodda JQuery ile eklenmiş bir tıklama olayını tetiklemesini durdurmak için bir ReactJS bileşeni içinde event.stopPropagation () kullanmaya çalışıyorum, ancak React'in stopPropagation () yalnızca olaylara yayılmayı durduruyor gibi görünüyor React'e de eklenmiştir ve JQuery'nin stopPropagation () işlevi, React ile eklenmiş olaylara yayılmayı durdurmaz.
StopPropagation () işlevinin bu olaylarda çalışmasını sağlamanın bir yolu var mı? Bu davranışları göstermek için basit bir JSFiddle yazdım :
/** @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();
});
});
stopImmediatePropagationtalep olay dinleyicileri bağlı oldukları sıraya göre çağrılacaktır. React JS'niz jQuery'nizden önce başlatılırsa (kemanınızda olduğu gibi), yayılmayı hemen durdurmak işe yarayacaktır.
componentDidMountkurmak olabilir, ancak bu, diğer React olay işleyicilerine beklenmedik şekillerde müdahale edebilir.
.stop-propagationmutlaka işe yaramayacağını fark ettim . Örneğiniz olay yetkilendirmesini kullanıyor ancak öğedeki yayılmayı durdurmaya çalışıyor. Dinleyici elemanı kendisine bağlı gerekiyor: $('.stop-propagation').on('click', function(e) { e.stopPropagation(); });. Bu keman, denediğiniz gibi yayılmayı engeller: jsfiddle.net/7LEDT/6
event.nativeEvent.stopImmediatePropagationDiğer olay dinleyicilerinin tetiklenmesini önlemek için kullanabilirsiniz , ancak yürütme sırası garanti edilmez.