Entonces, eventualmente volvemos a renderizar. Llamamos a useState durante el renderizado. Y solo entonces, durante el renderizado, React realizará las actualizaciones dentro de la cola de este hook. Toma la primera acción, le da el valor anterior, obtiene el nuevo valor, que es 1. Y si hay más acciones, continúa con la siguiente acción y las realiza una por una. Y luego pasa a la siguiente instrucción en nuestra función de renderizado. Esto se llama una actualización perezosa. Lo que significa que React solo realiza el trabajo cuando se necesita el resultado del trabajo. Y todo lo que digo sobre useState se aplica también a useReducer porque, de hecho, useState utiliza useReducer. Por lo tanto, es el mismo mecanismo detrás de escena.
Ahora te preguntarás, ¿qué pasa con la cancelación del renderizado? Entonces, si React solo calcula el nuevo estado durante el renderizado, ¿cómo puede cancelar el renderizado si el nuevo estado es diferente al estado anterior? En este caso, tenemos un estado que comienza desde cero. Y si lo actualizamos a cero, esperaríamos que React no vuelva a renderizar nuestro componente. Resulta que en realidad hay otro paso que a veces React decide tomar para esta optimización, que es calcular ansiosamente el nuevo estado inmediatamente cuando llamamos a la función setState. Y luego, si el nuevo estado es igual al estado anterior, no programa un nuevo renderizado. Y si son diferentes, entonces continúa normalmente, pero almacena en caché el resultado del cálculo dentro de la cola de actualización para que podamos usarlo más tarde cuando rendericemos el componente. Entonces el ciclo continúa, llegamos a la función de nuevo estado, React realiza las actualizaciones dentro de la cola, y si la acción ya tiene un resultado en caché, lo utiliza y actualiza el estado del hook. Así que tenemos estos dos modos, perezoso o ansioso. Con el modo perezoso, React solo realiza las acciones cuando se necesitan, y con el modo ansioso, se realizan inmediatamente. El modo perezoso se utiliza para ahorrar cálculos redundantes y posponerlos, y el modo ansioso se utiliza para cancelar y ahorrar re-renderizados redundantes.
Y la parte final es ¿cuándo decide React volver a renderizar? Cuando tienes controladores de eventos, por ejemplo, en clic, React los ejecuta dentro de algo que llaman un lote. Y dentro del lote, todas las actualizaciones se encolan. En este caso, tenemos dos llamadas a setCounter, ambas se encolan. Y cuando la función se completa, el lote termina y React vuelve a renderizar. Entonces, en este caso, tenemos dos actualizaciones en la cola y un re-renderizado. ¿Y qué pasa con los controladores de eventos asíncronos? Con este ejemplo, la función se completa antes de que se complete la operación asíncrona. Entonces, en este caso, cuando llegamos a setCounter, ya estamos fuera del lote, lo que significa que desencadenará un nuevo re-renderizado inmediatamente después de llamar a setCounter. Entonces, en este caso, tendremos dos llamadas a setCounter y dos re-renderizados del componente. Y ahora, hay formas de invocar manualmente el lote, pero no hablaremos de ellas durante esta charla. Entonces, de hecho, hemos terminado. Espero que hayas disfrutado. Espero que hayas aprendido algo nuevo y recuerda que siempre puedes abrir el código fuente de los Hooks de React. Si te resulta difícil, puedes contactarme y te ayudaré. Y si tienes alguna otra pregunta, estaré encantado de responder en el canal de Discord. Espero que tengas una buena conferencia y te mantengas seguro y espero verte a todos cara a cara pronto. Adiós. Adiós.
Comments