Saya mencoba berkomunikasi dengan iframe dengan postMessage API tetapi saya memiliki masalah dengan manajemen eventListeners di ES6
Dinyatakan dalam dokumen itu
Dengan React, setiap metode secara otomatis terikat ke instance komponennya (kecuali saat menggunakan sintaks kelas ES6)
Masalahnya adalah this.handler.bind(this) !== this.handler
jadi ketika saya selesai dengan acara tersebut, saya tidak dapat menghapus pendengar karena saya tidak dapat menyimpan referensi ke penangan. Saya dapat mencoba untuk mengenkapsulasi fungsinya, tetapi fungsi enkapsulasi juga membutuhkan pengikatan. Saya dapat mencoba untuk membuat super konstruktor juga tetapi saya tidak yakin ini adalah ide yang bagus, ditambah lagi saya tidak tahu argumen yang dibutuhkannya. Saya yakin saya kehilangan poin penting di sini.
Bantuan apa pun akan sangat dihargai!
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>
)
}
}
Terima kasih!
Pelacak masalah adalah untuk bug dengan React, bukan untuk dukungan umum. Gunakan Stack Overflow atau IRC untuk itu.
Karena itu, solusi umum untuk masalah ini adalah dengan tetap mengacu pada penangan terikat. Misalnya, Anda dapat mengikat metode di konstruktor:
constructor(props) {
super(props);
this.handleIframeData = this.handleIframeData.bind(this);
}
Lihat juga entri blog yang memperkenalkan kelas: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding .
@fkling Itulah yang ingin saya katakan: P. Benar di semua poin. Terima kasih!
Sry untuk itu, terima kasih lagi!
Komentar yang paling membantu
Pelacak masalah adalah untuk bug dengan React, bukan untuk dukungan umum. Gunakan Stack Overflow atau IRC untuk itu.
Karena itu, solusi umum untuk masalah ini adalah dengan tetap mengacu pada penangan terikat. Misalnya, Anda dapat mengikat metode di konstruktor:
Lihat juga entri blog yang memperkenalkan kelas: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding .