React: Hapus event listener yang digunakan dengan bind dalam sintaksis ES6?

Dibuat pada 9 Feb 2016  ·  3Komentar  ·  Sumber: facebook/react

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!

Question

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:

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 .

Semua 3 komentar

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!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat