Ich habe ein Projekt in React, das auf jeder Website platziert werden kann. Die Idee ist, dass ich eine JavaScript-Datei hosten, Leute ein Div mit einer bestimmten ID platzieren und React in diesem Div rendert.Handle Reaktion auf Ereignisdelegierung mit stopPropagation()
Bisher funktioniert das, außer Click-Events. Diese Werte sind handled at the top level. Das ist alles gut, aber eine der Seiten, wo die App platziert werden sollte, hat implementiert für ein Off-Canvas-Menü. Aus diesem Grund funktionieren die Ereignisse nicht ordnungsgemäß.
Ich habe versucht, alle Ereignisse an der Wurzel-Element zu kontrollieren, und den Versand manuell:
this.refs.wrapper.addEventListener('click', (event) => {
console.log(event);
console.log(event.type);
const evt = event || window.event;
evt.preventDefault();
evt.stopImmediatePropagation();
if (evt.stopPropagation) evt.stopPropagation();
if (evt.cancelBubble !== null) evt.cancelBubble = true;
document.dispatchEvent(event);
});
Diese nicht funktioniert, da das Ereignis bereits versandt wird:
Uncaught InvalidStateError: Failed to execute 'dispatchEvent' on 'EventTarget': The event is already being dispatched.
Was wäre der richtige Weg, um dieses Problem zu beheben? Nicht die synthetischen Ereignisse von React zu verwenden scheint nicht der richtige Weg für mich zu sein.
Es ist keine vollständige Antwort. Fehler wird nicht ausgelöst, aber Reacts Ereignis wird nicht funktionieren – MiF