startTransition
startTransition memungkinkan Anda merender bagian UI di latar belakang.
startTransition(action)Referensi
startTransition(action)
Fungsi startTransition memungkinkan Anda menandai sebuah pembaruan state sebagai transisi.
import { startTransition } from 'react';
function TabContainer() {
const [tab, setTab] = useState('about');
function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}Lihat lebih banyak contoh di bawah.
Parameter
action: Fungsi yang memperbarui beberapa state dengan memanggil satu atau beberapa fungsiset. React memanggilactionsegera tanpa parameter dan menandai semua pembaruan state yang dijadwalkan secara sinkron selama panggilan fungsiactionsebagai Transisi. Semua panggilan asinkron yang ditunggu dalamactionakan disertakan dalam transisi, tetapi saat ini memerlukan pembungkusan semua fungsisetsetelahawaitdalamstartTransitiontambahan (lihat Pemecahan Masalah). Pembaruan state yang ditandai sebagai Transisi akan menjadi non-blocking dan tidak akan menampilkan indikator pemuatan yang tidak diinginkan..
Kembalian
startTransition tidak mengembalikan apa pun.
Catatan Penting
-
startTransitiontidak menyediakan penanda untuk mengetahui apakah sebuah transisi sedang pending atau tidak. Untuk menampilkan indikator pending ketika sebuah transisi sedang berjalan, Anda dapat menggunakanuseTransition. -
Anda hanya dapat menempatkan pembaruan state ke dalam transisi bila Anda memiliki akses terhadap fungsi
setdari state tersebut. Jika Anda ingin memulai sebuah transisi sebagai respons terhadap sebuah prop atau nilai balik sebuah custom Hook, cobalah menggunakanuseDeferredValue. -
Fungsi yang Anda teruskan ke
startTransitiondipanggil segera, menandai semua pembaruan status yang terjadi saat dijalankan sebagai Transisi. Jika Anda mencoba melakukan pembaruan status dalamsetTimeout, misalnya, pembaruan tersebut tidak akan ditandai sebagai Transisi. -
Anda harus membungkus pembaruan status apa pun setelah permintaan async apa pun dalam
startTransitionlain untuk menandainya sebagai Transisi. Ini adalah batasan yang diketahui yang akan kami perbaiki di masa mendatang (lihat Pemecahan Masalah). -
Sebuah pembaruan state yang ditandai sebagai transisi dapat diinterupsi oleh pembaruan state yang lain. Contohnya, bila Anda memperbarui sebuah komponen grafik didalam sebuah transisi, namun kemudian mengetik dalam sebuah masukan teks saat grafik tersebut masih di dalam proses re-render, React akan mengulangi proses re-render pada grafik tersebut setelah selesai melakukan pembaruan state dalam masukan teks tersebut.
-
Pembaruan transisi tidak dapat digunakan untuk mengontrol masukan teks.
-
Ketika terdapat beberapa transisi yang sedang berjalan, React akan menggabungkannya menjadi satu. Ini adalah sebuah keterbatasan yang kemungkinan besar akan dihapus pada rilis React selanjutnya.
Penggunaan
Menandai sebuah pembaruan state sebagai transisi non-blocking
Anda dapat menandai sebuah pembaruan state sebagai sebuah transisi dengan memasukkannya ke dalam pemanggilan startTransition:
import { startTransition } from 'react';
function TabContainer() {
const [tab, setTab] = useState('about');
function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}Transisi memungkinkan pembaruan antarmuka pengguna (user interface) tetap responsif, bahkan dalam gawai yang relatif lamban.
Dengan sebuah transisi, antarmuka aplikasi Anda akan tetap responsif di tengah proses re-render. Sebagai contoh, ketika pengguna menekan sebuah tab tetapi kemudian berubah pikiran dan menekan tab lain, mereka dapat tetap melakukannya tanpa perlu menunggu proses re-render pertama untuk selesai.