UseEffect Cara Melangkau Pemberian Awal Dan Hanya Pencetus Selepas Sebarang Perubahan Ketergantungan

DDD
Lepaskan: 2024-10-02 06:34:29
asal
1125 orang telah melayarinya

UseEffect How To Skip Initial Render And Only Trigger After Any Dependecy Change

harap anda berjaya saya lihat anda agak kecewa dengan useEffect bit tetapi jangan risau mari kita perbaiki bersama-sama dan selesaikan masalah.

Mengapa ia Heppen : Kawan saya useEffect dia sangat mudah: ia dijalankan selepas JSX juga apabila sebarang nilai dalam tatasusunan kebergantungannya berubah. tetapi kadangkala useEffect mencetuskan walaupun data dalam tatasusunan kebergantungan tidak berubah. Ini berlaku kerana pemaparan awal.

Penyelesaian : saya mungkin berbeza pendekatan maka anda jika saya membuat sebarang kesilapan sila beritahu saya dan ya ini berkesan jadi mari menyelam

Langkah 1 : buat 2 useref dalam kes saya componentA.tsx
Kami akan menggunakan dua rujukan untuk mengawal tingkah laku pemaparan awal:

const skippedInitialRender = useRef(false);
const wasInitialRender = useRef(false);

Langkah 2 : cipta useEffect

useEffect(() => {
        if(skippedInitialRender.current) {
            // After the first render, the value changes and this block will run
        }
        const currentTimeout = setTimeout(() => {
            wasInitialRender.current = true;
            skippedInitialRender.current = true;
        }, 200);
        return () => clearTimeout(currentTimeout);
    }, [value])
Salin selepas log masuk

*Langkah 3 : * jalankan logik anda di dalam pernyataan if dan selesai

*Penjelasan : * Semasa pemaparan awal, kami menangguhkan pelaksanaan menggunakan setTimeout. Ini memastikan bahawa tidak kira berapa kali useEffect pencetus semasa pemaparan awal (2, 4 atau lebih), logik kami tidak akan berjalan. Logik hanya berjalan apabila nilai kebergantungan berubah semula selepas pemaparan awal.

Atas ialah kandungan terperinci UseEffect Cara Melangkau Pemberian Awal Dan Hanya Pencetus Selepas Sebarang Perubahan Ketergantungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan