Ich versuche, mit einem Iframe über die postMessage-API zu kommunizieren, habe jedoch ein Problem mit der eventListeners-Verwaltung in ES6
In den Dokumenten heißt es, dass
Mit React wird jede Methode automatisch an ihre Komponenteninstanz gebunden (außer bei Verwendung der ES6-Klassensyntax).
Das Problem ist, dass this.handler.bind(this) !== this.handler
Wenn ich mit dem Ereignis fertig bin, kann ich den Listener nicht entfernen, da ich keinen Verweis auf den Handler behalten kann. Ich könnte versuchen, die Funktion zu kapseln, aber die Kapselungsfunktion würde auch eine Bindung benötigen. Ich könnte versuchen, den Konstruktor auch zu super zu machen, aber ich bin mir nicht sicher, ob dies eine gute Idee ist, und ich kenne die Argumente nicht, die er benötigt. Ich bin mir ziemlich sicher, dass mir hier ein wichtiger Punkt fehlt.
Jede Hilfe wäre sehr dankbar!
export default class SomeComponent extends Component {
handleIframeData(event) {
// some stuff in there that will need 'this' to be set to the component's context, to get props for example.
}
componentDidMount() {
window.addEventListener('message', this.handleIframeData.bind(this), false)
}
componentWillUnmount() {
// won't work because 'this.handleIframeData.bind(this) !== this.handleIframeData'
window.removeEventListener('message', this.handleIframeData, false)
}
render() {
return (
<div className="SomeComponent" style={{height: '100%', width:'100%', display: 'table'}}>
<iframe src="assets/iframe/index.html" style={{display: 'table-row', width: '100%', height:'100%', border: 0}}></iframe>
</div>
)
}
}
Danke trotzdem !
Der Issue-Tracker ist für Fehler mit React vorgesehen, nicht für die allgemeine Unterstützung. Verwenden Sie dazu Stack Overflow oder IRC.
Die generische Lösung für dieses Problem besteht jedoch darin, einen Verweis auf den gebundenen Handler beizubehalten. Sie können die Methode beispielsweise im Konstruktor binden:
constructor(props) {
super(props);
this.handleIframeData = this.handleIframeData.bind(this);
}
Siehe auch den Blog-Beitrag, in dem Klassen eingeführt wurden: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding .
@fkling Genau das wollte ich sagen: P. In allen Punkten korrigieren. Vielen Dank!
Sry dafür, nochmals vielen Dank!
Hilfreichster Kommentar
Der Issue-Tracker ist für Fehler mit React vorgesehen, nicht für die allgemeine Unterstützung. Verwenden Sie dazu Stack Overflow oder IRC.
Die generische Lösung für dieses Problem besteht jedoch darin, einen Verweis auf den gebundenen Handler beizubehalten. Sie können die Methode beispielsweise im Konstruktor binden:
Siehe auch den Blog-Beitrag, in dem Klassen eingeführt wurden: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding .