Lompat ke konten utama
←

React Dasar

Pelajaran 11 dari 17

Event dan state

State sebagai potret dan antrean pembaruan

Setelah pelajaran ini kamu bisa memperkirakan nilai state di dalam satu penangan event, dan memakai fungsi updater untuk beberapa pembaruan berturut-turut.

±13 menitDiperiksa 24 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Memanggil fungsi set tidak mengubah variabel state yang sedang dipakai; fungsi itu meminta render baru dengan nilai baru. Selama satu render, termasuk di dalam penangan event yang dibuat render itu, nilai state tetap seperti potret yang diambil saat render: tidak berubah walaupun set sudah dipanggil.

const [stok, setStok] = useState(10);

function jual() {
  setStok(stok - 1);
  console.log(stok); // klik pertama mencatat 10, bukan 9
}

Akibatnya, setStok(stok - 1) yang ditulis tiga kali dalam satu penangan hanya mengurangi satu. Ketiganya membaca stok yang sama, yaitu 10, dan ketiganya meminta nilai 9. React menunggu sampai seluruh kode di penangan selesai sebelum memproses pembaruan dan merender ulang; pengelompokan ini disebut batching.

Untuk pembaruan yang bergantung pada hasil pembaruan sebelumnya, kirim fungsi updater: setStok((s) => s - 1). React memasukkan fungsi itu ke antrean dan, saat render berikutnya, menjalankan isi antrean berurutan dengan hasil langkah sebelumnya sebagai masukan. Tiga updater berturut-turut mengurangi tiga. Nama parameternya lazim diambil dari huruf awal nama state, seperti s untuk stok.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Penangan sebuah tombol berisi tiga baris berturut-turut: setPorsi(porsi + 2); setPorsi(porsi + 2); setPorsi(porsi + 2); Nilai porsi sebelum klik adalah 1. Berapa nilai porsi yang tampil setelah tombol diklik sekali?

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi