ฉันกำลังพยายามใช้ event.stopPropagation () ภายในคอมโพเนนต์ ReactJS เพื่อหยุดเหตุการณ์การคลิกไม่ให้เดือดและทริกเกอร์เหตุการณ์การคลิกที่แนบมากับ JQuery ในโค้ดดั้งเดิม แต่ดูเหมือนว่า stopPropagation () ของ React จะหยุดการเผยแพร่ไปยังเหตุการณ์เท่านั้น ยังแนบอยู่ใน React และ stopPropagation () ของ JQuery ไม่หยุดการแพร่กระจายไปยังเหตุการณ์ที่แนบมากับ 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
เพื่อป้องกันไม่ให้ผู้ฟังเหตุการณ์อื่นเริ่มทำงานได้ แต่ไม่รับประกันลำดับการดำเนินการ