Terdapat beberapa data yang masuk daripada tinjauan panjang setiap 5 saat dan saya mahu komponen saya menghantar operasi setiap kali item tatasusunan (atau panjang tatasusunan itu sendiri) berubah. Bagaimanakah cara saya menghalang useEffect daripada masuk ke gelung tak terhingga apabila menghantar tatasusunan sebagai kebergantungan, tetapi masih dapat menjadualkan beberapa operasi jika ada perubahan nilai?
useEffect(() => { console.log(outcomes) }, [outcomes])
di manaoutcomes
是一个 ID 数组,例如[123, 234, 3212]
。数组中的项目可能会被替换或删除,因此数组的总长度可能(但不一定)保持不变,因此传递outcomes.length
sebagai tanggungan tidak berlaku.
outcomes
Pemilih tersuai daripada pemilihan semula:
const getOutcomes = createSelector( someData, data => data.map(({ outcomeId }) => outcomeId) )
Menggunakan JSON.stringify() atau mana-mana kaedah perbandingan mendalam mungkin kurang cekap, jika anda mengetahui bentuk objek lebih awal, anda boleh menulis cangkuk kesan anda sendiri untuk mencetuskan panggilan balik ke fungsi kesamaan tersuai anda berdasarkan hasilnya.
useEffect
的工作原理是检查依赖项数组中的每个值是否与前一渲染中的值相同,如果其中一个不是,则执行回调。因此,我们只需要使用useRef
保留我们感兴趣的数据实例,并且仅在自定义相等性检查返回false
Tetapkan kejadian baharu untuk mencetuskan kesan.Penggunaan
Melangkah lebih jauh, kami juga boleh menggunakan semula cangkuk ini dengan mencipta cangkuk kesan yang menerima fungsi kesamaan tersuai.
Penggunaan
Demonstrasi secara langsung
Anda boleh lulus
JSON.stringify(outcomes)
sebagai senarai tanggungan:Ketahui lebih lanjutdi sini