Adakah ini shim yang tepat untuk cangkuk useEffectEvent
React yang akan datang? Adakah terdapat sebarang masalah yang berpotensi dengannya?
Bahagian yang saya tidak pasti ialah sama ada rujukan itu dijamin dikemas kini sebelum fungsi yang dikembalikan digunakan untuk sebarang kesan lain. Saya rasa saya baik dengan ini selagi saya tidak pernah menggunakan yang agak esoterik useInsertionEffect
di tempat lain dalam kod saya, tetapi saya ingin mengesahkan.
function useEffectEvent(callback) { const fnRef = useRef(null) useInsertionEffect(() => { fnRef.current = callback }) return (...args) => { return fnRef.current.apply(null, args) } }
Saya tidak fikir pasukan React telah mencadangkan poliisi rasmi untuk
useEffectEvent
(sekurang-kurangnya saya belum melihatnya lagi).Setelah berkata demikian, anda boleh menyasarkan yang kini tidak berfungsi di
useEvent
的 RFC,最初使用useLayoutEffect
. Dalam versi awal Memisahkan acara daripada kesan, Dan Abramov menunjukkan bahawa versi yang dikemas kini kelihatan seperti ini (tidak lagi kelihatan dalam dokumentasi):Polyfill ini menggunakan
useInsertionEffect
。我相信这种选择的原因是插入效果是最先运行的 (与useLayoutEffect
和useEffect
berbanding). Oleh itu, adalah sangat selamat untuk menganggap bahawa rujukan dikemas kini sebelum sebarang kesan lain dijalankan.Kemudian, RFC untuk
Mulakan tunjukkan dalam dokumentasiuseEvent
telah ditangguhkanuseEvent
的 RFC 是搁置和useEffectEvent
开始在文档中显示 。尽管如此,由于公开的行为是相同的,因此可以重用相同的polyfill来实现useEffectEvent
dan. Namun begitu, memandangkan tingkah laku yang terdedah adalah sama, polyfill yang sama boleh digunakan semula untuk pelaksanaan
useCallback(..., [])
.Sila ambil perhatian bahawa dengan polyfill ini, cangkuk mengembalikan fungsi yang stabil (terima kasih ), yang mungkin tidak diperlukan tetapi lebih mudah (untuk berjaga-jaga) pengguna tersilap menambah fungsi yang dikembalikan kepada kebergantungan kesan ).
Saya ingin mengetahui lebih lanjut tentang polyfill, saya telah menulis blog tentangnya: 🎜Lihat useEvent polyfill🎜 dalam dokumentasi React baharu. 🎜