Soy el autor principal de un módulo virtual-dom , por lo que podría responder sus preguntas. De hecho, hay 2 problemas que deben resolverse aquí
- ¿Cuándo vuelvo a renderizar? Respuesta: cuando observo que los datos están sucios.
- ¿Cómo re-renderizo eficientemente? Respuesta: Usar un DOM virtual para generar un parche DOM real
En React, cada uno de sus componentes tiene un estado. Este estado es como un observable que puede encontrar en knockout u otras bibliotecas de estilo MVVM. Esencialmente, React sabe cuándo volver a renderizar la escena porque puede observar cuándo cambian estos datos. La comprobación sucia es más lenta que las observables porque debe sondear los datos a intervalos regulares y verificar todos los valores de la estructura de datos de forma recursiva. En comparación, establecer un valor en el estado le indicará al oyente que algún estado ha cambiado, por lo que React simplemente puede escuchar los eventos de cambio en el estado y volver a procesar la cola.
El DOM virtual se utiliza para una representación eficiente del DOM. Esto no está realmente relacionado con la verificación sucia de sus datos. Puede volver a renderizar utilizando un DOM virtual con o sin verificación sucia. Tiene razón en que hay algo de sobrecarga en el cálculo de la diferencia entre dos árboles virtuales, pero la diferencia de DOM virtual consiste en comprender qué necesita actualizarse en el DOM y no si sus datos han cambiado o no. De hecho, el algoritmo diff es un verificador sucio, pero se usa para ver si el DOM está sucio.
Nuestro objetivo es volver a representar el árbol virtual solo cuando el estado cambia. Por lo tanto, usar un observable para verificar si el estado ha cambiado es una forma eficiente de evitar reproducciones innecesarias, lo que causaría muchas diferencias innecesarias en los árboles. Si nada ha cambiado, no hacemos nada.
Un DOM virtual es bueno porque nos permite escribir nuestro código como si estuviéramos renderizando de nuevo toda la escena. Detrás de escena queremos calcular una operación de parche que actualice el DOM para que se vea como esperamos. Entonces, aunque el algoritmo virtual de diferencias / parches DOM probablemente no sea la solución óptima , nos brinda una forma muy agradable de expresar nuestras aplicaciones. Simplemente declaramos exactamente lo que queremos y React / virtual-dom resolverá cómo hacer que su escena se vea así. No tenemos que manipular DOM manualmente ni confundirnos con el estado DOM anterior. Tampoco tenemos que volver a renderizar toda la escena, lo que podría ser mucho menos eficiente que parchearla.