Jom terus ke kod Saya sudah lama memikirkannya dan tidak tahu di mana masalahnya.
state = { spread: false } componentDidMount() { console.log('document clicked') document.onclick = () => { if(this.state.spread) { this.setState({ spread: false }) } } } spreadHandler (e) { console.log('target clicked') // 这个事件绑定在一个 a 标签上 e.stopPropagation() this.setState({ spread: !this.state.spread }) }
Fungsi ini serupa dengan bar navigasi di bahagian atas Taobao, kecuali saya menggunakan acara klik di sini. Sekarang saya membatalkan gelembung apabila saya mencetuskan spreadHandler, tetapi peristiwa klik dokumen masih akan dicetuskan. Saya tidak tahu sama ada peristiwa itu terikat pada teg, atau jika ia disebabkan oleh sebab lain Adakah sesiapa tahu apa yang berlaku?
Mencegah menggelegak dalam peristiwa sintetik react tidak boleh membatalkan menggelegak peristiwa asli
Mencegah menggelegak dalam peristiwa asli boleh menghalang menggelegak dalam peristiwa sintetik react
Jadi anda harus cuba mengelakkan mencampurkannya, dan ia mesti digunakan Jika ya, anda boleh menambah lapisan pertimbangan dalam pengendali acara dokumen.
e.preventDeafult()
Cuba ini:
Mekanisme acara React berbeza daripada js asli.
Peristiwa sintetik React semuanya dilaksanakan melalui proksi acara yang terikat pada klik pada dokumen, jadi adalah mustahil untuk menghalang pemprosesan acara lain pada dokumen dengan menghalang peristiwa sintetik daripada menggelegak (sudah berbuih pada dokumen), jadi anda perlu menggunakan Acara asli