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();
});
});
stopImmediatePropagation
talep 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.
componentDidMount
kurmak olabilir, ancak bu, diğer React olay işleyicilerine beklenmedik şekillerde müdahale edebilir.
.stop-propagation
mutlaka 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.stopImmediatePropagation
Diğer olay dinleyicilerinin tetiklenmesini önlemek için kullanabilirsiniz , ancak yürütme sırası garanti edilmez.