Rumah > hujung hadapan web > tutorial js > Mengapa `setState` React Kelihatan Asynchronous, dan Bagaimana Saya Boleh Memastikan Keadaan Yang Dikemas Kini Dicerminkan Serta-merta?

Mengapa `setState` React Kelihatan Asynchronous, dan Bagaimana Saya Boleh Memastikan Keadaan Yang Dikemas Kini Dicerminkan Serta-merta?

DDD
Lepaskan: 2024-12-30 11:50:14
asal
1034 orang telah melayarinya

Why Does React's `setState` Appear Asynchronous, and How Can I Ensure Updated State is Immediately Reflected?

Kemas Kini Keadaan Tertunda dalam React: Memahami Asynchronous setState

Apabila bekerja dengan komponen React, adalah penting untuk memahami sifat kaedah setState. Berbeza dengan pengaturcaraan imperatif, di mana kemas kini keadaan berlaku serta-merta, setState React adalah tak segerak. Ini bermakna mengemas kini keadaan tidak menjamin pantulan serta-merta dalam keadaan dalaman komponen.

Kes yang dipersoalkan: Papan TertundaAdd Modal Show Flag

Pertimbangkan kod berikut coretan yang melaksanakan komponen BoardAdd dalam React:

class BoardAdd extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            boardAddModalShow: false
        };
        this.openAddBoardModal = this.openAddBoardModal.bind(this);
    }

    openAddBoardModal() {
        this.setState({ boardAddModalShow: true });
        console.log(this.state.boardAddModalShow);
    }
}
Salin selepas log masuk

Apabila kaedah openAddBoardModal digunakan, ia menetapkan bendera boardAddModalShow kepada benar dan mencetak nilainya ke konsol. Walau bagaimanapun, output konsol menunjukkan bahawa nilai kekal palsu walaupun panggilan setState.

Mengapa?

setState adalah tak segerak. Selepas ia dipanggil, UI kekal tidak terjejas sehingga React menjadualkan pemaparan semula. Pernyataan console.log dilaksanakan sebelum pemaparan semula berlaku, menyebabkan nilai keadaan lapuk dicetak.

Penyelesaian: Menggunakan Panggilan Balik

Untuk menyelesaikan isu ini, kita boleh menggunakan fungsi panggil balik sebagai hujah untuk setState. Panggilan balik dilaksanakan selepas keadaan dikemas kini dan pemaparan semula telah berlaku:

openAddBoardModal() {
    this.setState({ boardAddModalShow: true }, function () {
        console.log(this.state.boardAddModalShow);
    });
}
Salin selepas log masuk

Dalam kes ini, pernyataan console.log akan dilaksanakan selepas keadaan dikemas kini, menunjukkan yang baharu dengan betul nilai boardAddModalShow sebagai benar.

Mengapa Jadikan setState Asynchronous?

Sifat tak segerak setState ini berfungsi untuk tujuan meningkatkan prestasi. Memandangkan kemas kini keadaan mencetuskan pemaparan semula, menjadikannya segerak boleh menyebabkan penyemak imbas tidak bertindak balas. Batching setState panggilan meningkatkan prestasi dengan meminimumkan pemaparan semula yang tidak perlu dan meningkatkan pengalaman pengguna.

Atas ialah kandungan terperinci Mengapa `setState` React Kelihatan Asynchronous, dan Bagaimana Saya Boleh Memastikan Keadaan Yang Dikemas Kini Dicerminkan Serta-merta?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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