React-native-router-flux: Menerima peringatan "event sintetis digunakan kembali" saat menavigasi antar adegan menggunakan kode sampel redux

Dibuat pada 27 Okt 2016  ·  11Komentar  ·  Sumber: aksonov/react-native-router-flux

Versi: kapan

Beri tahu kami versi mana yang Anda gunakan:

  • reaksi-asli-router-flux v3.36.0
  • reaksi asli v0.35.0

Perilaku yang diharapkan

Menavigasi dari satu adegan ke adegan lain menggunakan contoh redux akan bekerja tanpa peringatan kinerja Bereaksi

Perilaku sebenarnya

Menerima peringatan berikut saat menavigasi antar adegan menggunakan kode contoh yang disediakan: "Peringatan: Peristiwa sintetis ini digunakan kembali untuk alasan kinerja. Jika Anda melihat ini, Anda mengakses properti "ketik" pada peristiwa sintetis yang dirilis/dibatalkan. Ini disetel ke null. Jika Anda harus menyimpan event sintetis asli, gunakan event.persist()."

Langkah-langkah untuk mereproduksi

  1. Terapkan kode contoh untuk redux yang ditemukan di sini , termasuk yang berikut ini di komponen pertama Anda:
<Text onPress={Actions.home}>Go home</Text>
  1. Jalankan aplikasi dan ketuk Go home
  2. Aplikasi diarahkan ke tampilan home , tetapi beberapa peringatan muncul dengan teks di atas

glass_and_iphone_6s_ _ios_10_0__14a345_

Komentar yang paling membantu

@joeferraro @Almouro - Saya telah menemukan bahwa berubah dari

onPress={Actions.otherScene}

ke

onPress={() => Actions.otherScene()}

telah dihapus dengan kesalahan ini.

Semua 11 komentar

@joeferraro Saya juga melihat ini - apakah Anda beruntung mengetahui apa yang sedang terjadi?

Saya melihat hal yang sama :\

@joeferraro @Almouro - Saya telah menemukan bahwa berubah dari

onPress={Actions.otherScene}

ke

onPress={() => Actions.otherScene()}

telah dihapus dengan kesalahan ini.

Terima kasih @jamielob , ini juga masalah bagi saya. :)

Terima kasih @jamielob.

Saya bertanya-tanya mengapa tutorial mini menggunakan onPress={Actions.Foo} sebagai gantinya. Mungkinkah ada alasan untuk itu?

screen shot 2017-01-30 at 4 14 27 pm

saran jamielob memperbaiki kesalahan untuk saya.

Noob di sini, apa yang terjadi secara berbeda di bawah tenda ketika Anda memberikannya fungsi anonim vs referensi aktual.

Jika ada orang lain yang menemukan kesalahan ini dan yang di atas tidak berfungsi, saya menemukannya karena saya meneruskan argumen pertama dari onSubmitEditing pada <TextInput> ke fungsi seperti:

<TextInput
  onSubmitEditing={(text) => this.performSearch(text)} // Should be event, not text
/>

Variabel teks itu sebenarnya adalah acara kirim yang akhirnya memberi saya pesan di atas dan sakit kepala debugging untuk sementara waktu.

event.preventDefault();
event.stopPropagation();

Saya pikir masalahnya adalah, Anda mencoba mengakses objek acara setelah dirilis dan didefinisikan ulang.

React Docs => SyntheticEvent dikumpulkan. Ini berarti bahwa objek SyntheticEvent akan digunakan kembali dan semua properti akan dibatalkan setelah panggilan balik peristiwa dipanggil. Ini untuk alasan kinerja. Dengan demikian, Anda tidak dapat mengakses acara dengan cara yang tidak sinkron.

jika Anda perlu menggunakan atribut dari acara obj maka Anda harus mengaksesnya seperti ini

function displayForm(event){
    console.log(event) // will error
    console.log(event.type) will work
    const eventType = evnet.type; 
   // or call event.persist();

Jika Anda ingin mengakses properti peristiwa secara asinkron, Anda harus memanggil event.persist() pada peristiwa tersebut, yang akan menghapus peristiwa sintetis dari kumpulan dan memungkinkan referensi ke peristiwa tersebut disimpan oleh kode pengguna.

Saya tidak yakin apakah penyebab masalah ini telah dijelaskan dengan jelas, jadi izinkan saya untuk membagikan pemahaman saya dan bagaimana saya memperbaikinya.

TouchableWithoutFeedback mendefinisikan onPress?: (event: GestureResponderEvent) => void; .

Jadi, ketika hanya memberikan nama fungsi, parameter yang diteruskan adalah GestureResponderEvent - dan ada kemungkinan itu bukan yang Anda harapkan.

Dengan mengubah dari nama fungsi menjadi fungsi anonim yang memanggil fungsi Anda (misalnya () => yourFunction() ), GestureResponderEvent tidak diteruskan ke fungsi Anda.

Teman-teman saya punya masalah ini pada navigator.

Screen.navigationOptions=({navigation})=>{
const handleEditButton=navigation.navigate.bind(this,"EditProduct")
return {
    headerTitle:"My Products",
    headerRight:<CustomHeaderButton 
    iconName="ios-add"
    title="Add"
    iconSize={26}
    color={colors.bright}
    onPress={handleEditButton}
    />
}
}

perhatikan metode yang saya gunakan. Saya mencoba untuk mengikat metode navigasi. (Ya aku tahu)

const handleAddButton=()=>navigation.navigate("EditProduct")

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

booboothefool picture booboothefool  ·  3Komentar

maphongba008 picture maphongba008  ·  3Komentar

kirankalyan5 picture kirankalyan5  ·  3Komentar

fgrs picture fgrs  ·  3Komentar

jgibbons picture jgibbons  ·  3Komentar