Saya penulis utama modul virtual-dom , jadi saya mungkin bisa menjawab pertanyaan Anda. Sebenarnya ada 2 masalah yang perlu diselesaikan di sini
- Kapan saya melakukan render ulang? Jawab: Ketika saya amati bahwa datanya kotor.
- Bagaimana cara merender ulang secara efisien? Jawaban: Menggunakan DOM virtual untuk menghasilkan patch DOM nyata
Dalam Bereaksi, masing-masing komponen Anda memiliki status. Keadaan ini seperti diamati yang mungkin Anda temukan di KO atau pustaka gaya MVVM lainnya. Intinya, Bereaksi tahu kapan harus merender ulang adegan karena ia bisa mengamati kapan data ini berubah. Pengecekan yang kotor lebih lambat daripada yang bisa diamati karena Anda harus melakukan polling data secara berkala dan memeriksa semua nilai dalam struktur data secara rekursif. Sebagai perbandingan, menetapkan nilai pada negara akan memberi sinyal kepada pendengar bahwa beberapa negara telah berubah, sehingga Bereaksi hanya dapat mendengarkan untuk acara perubahan pada negara dan mengantri rendering ulang.
DOM virtual digunakan untuk rendering ulang DOM secara efisien. Ini tidak benar-benar terkait dengan kotor memeriksa data Anda. Anda dapat merender ulang menggunakan DOM virtual dengan atau tanpa pemeriksaan kotor. Anda benar bahwa ada beberapa overhead dalam menghitung perbedaan antara dua pohon virtual, tetapi perbedaan DOM virtual adalah tentang memahami apa yang perlu diperbarui di DOM dan bukan apakah data Anda telah berubah atau tidak. Sebenarnya, algoritma diff adalah pemeriksa kotor itu sendiri tetapi digunakan untuk melihat apakah DOM kotor.
Kami bertujuan membuat ulang pohon virtual hanya ketika kondisi berubah. Jadi menggunakan diamati untuk memeriksa apakah negara telah berubah adalah cara yang efisien untuk mencegah rendering ulang yang tidak perlu, yang akan menyebabkan banyak perbedaan pohon yang tidak perlu. Jika tidak ada yang berubah, kami tidak melakukan apa pun.
DOM virtual itu bagus karena memungkinkan kita menulis kode kita seolah-olah kita sedang merender ulang seluruh adegan. Di belakang layar, kami ingin menghitung operasi tambalan yang memperbarui DOM agar terlihat seperti yang kami harapkan. Jadi walaupun algoritma DOM diff / patch virtual mungkin bukan solusi optimal , ini memberi kami cara yang sangat bagus untuk mengekspresikan aplikasi kami. Kami hanya menyatakan dengan tepat apa yang kami inginkan dan Bereaksi / virtual-dom akan mencari cara untuk membuat adegan Anda terlihat seperti ini. Kami tidak harus melakukan manipulasi DOM manual atau bingung tentang keadaan DOM sebelumnya. Kami juga tidak perlu merender ulang seluruh adegan, yang bisa jadi jauh lebih efisien daripada menambalnya.