Saya memiliki fungsi reaksi

<button onClick={(e) => this.playVideo(e, name)}>

Mencoba dengan kedua opsi

playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function () {
      console.log(event, 'event details inside timeout'); 
    }, 1500)
}
playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function (event) {
      console.log(event, 'event details inside timeout'); 
    }, 1500)
}

Dalam kode di atas, acara awal berfungsi seperti yang diharapkan tetapi saya memerlukan data acara di dalam settimout bcaz Saya harus memuat beberapa file js berdasarkan acara tersebut, tetapi data acara di dalam fungsi settimeout selalu nol.

Saya juga telah mencoba dengan onClickCapture tetapi tetap tidak berhasil

<button onClickCapture={(e) => this.playVideo(e, name)}>
2
Swaroop Gupta Voleti 5 Januari 2021, 10:58

3 jawaban

Jawaban Terbaik

Sebelum React-v17 Anda perlu nilai berada dalam cakupan karena Sintetis Pembungkus acara yang digunakan dalam Bereaksi:

playVideo(event) => {
    const { currentTarget } = event;

    // closure on currentTarget won't lose due to synthetic event.
    setTimeout(() => {
      console.log(currentTarget, 'event details inside timeout'); 
    }, 1500)
}
3
Dennis Vash 5 Januari 2021, 08:28

Anda dapat meneruskan parameter ke setTimeout callback dengan parameter tambahan di setTimeout . Cukup tambahkan objek event di parameter setelah }, 1500, event) dan itu akan tersedia di callback.

playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function (event) {
      console.log(event, 'event details inside timeout'); 
    }, 1500, event) // <- Pass event object from here
}

Edit Sesuai saran dari @ Felix King dalam komentar anda dapat menggunakan objek event dari parent scope playVideo hanya dengan menghapus parameter di callback seperti di bawah ini.

playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function () { // <- Do no add event parameter so event object will be fetch from parent scope.
      console.log(event, 'event details inside timeout'); 
    }, 1500)
}
0
Karan 5 Januari 2021, 08:07

Jangan berikan parameter event ke fungsi settimeout karena dianggap sebagai variabel lokal dalam cakupan ini.

0
Amir Hasanzade 5 Januari 2021, 08:12