Volviendo al ejemplo de navegación, sin usar ninguna característica concurrente, cada actualización es de alta prioridad. Así que como podemos ver en este primer ejemplo, porque estamos usando un antiguo USETAPE para rastrear la página seleccionada actualmente, las representaciones que se activan al navegar a una página diferente son sincrónicas, y por lo tanto, son bloqueantes. Una vez más, observa que la navegación bloquea las interacciones con la barra lateral.
Ahora, cuando usamos características concurrentes en esta próxima versión, en este caso estamos usando start transition, podemos hacer que las navegaciones sean una actualización de baja prioridad, de modo que ya no bloqueen la actualización de la barra lateral, al mismo tiempo que podemos mostrar un estado de carga con el indicador isPending, por eso ves que la pantalla se oscurece, ya sabes, con este tipo de capa grisácea. Y, en esta versión, hemos añadido un nuevo estado, delayedPage, y vamos a usar ese estado para activar la actualización de baja prioridad, lo que significa que en realidad vamos a usar esta actualización para volver a representar la página en sí. Y luego, al usar el hook useTransition, tenemos acceso primero al indicador isPending, que nos dice cuándo hay una representación de baja prioridad pendiente, y también a la función startTransition que nos permite marcar una actualización de estado como de baja prioridad, de modo que su correspondiente representación, es decir, la representación que se activa con esta actualización, será una representación de baja prioridad, y por lo tanto, no bloqueante.
En este segundo ejemplo, una vez más, estamos filtrando una lista enorme, que, debido al número de componentes que tiene que representar, es bastante lenta, y sin usar ninguna característica concurrente, la representación de la lista filtrada bloquea las actualizaciones de la barra de búsqueda, que es justo lo que vimos antes, ¿verdad? Por eso parece que se congela. Ahora, en la segunda versión, al usar el hook Use Deferred Value, y pasando el filtro diferido que obtenemos del hook a la lista de filtros en su lugar, estamos marcando sus representaciones como de baja prioridad, y ahora ceden a las actualizaciones de alta prioridad en la barra de búsqueda. Observa cómo en estos dos ejemplos, aunque Concurrent Render no hace que la aplicación sea más rápida, ya sabes, no acelera nada, hace que se sienta más rápida, al hacerla más receptiva, y esto es muy importante.
Bueno, a continuación quiero profundizar un poco más en este ejemplo de filtro de lista, para que podamos observar más de cerca cómo funciona este proceso. Vale, esto va a sentar las bases para lo que vamos a ver a continuación. Así que aquí, ahora estoy registrando en la consola cuándo las actualizaciones de alta y baja prioridad empiezan y terminan de representarse. Y también estoy resaltando cuándo se interrumpen las representaciones. Veamos esto paso a paso. Primero, cuando escribimos la primera letra H, como estamos llamando a un set state para establecer el filtro, esto provoca una representación de alta prioridad, que se ejecuta de principio a fin sin parar. Como sin ser interrumpida. Observa que en esta primera representación de alta prioridad, sólo el filtro se ha actualizado. Pero el tercer filtro todavía tiene su antiguo valor, que es simplemente una cadena vacía. Luego, después de que la actualización de alta prioridad termina de representarse, React comienza la representación de baja prioridad, donde tanto el filtro como el tercer filtro están actualizados. Pero una vez más, como escribimos otra letra antes de que la representación de baja prioridad termine, entonces la interrumpimos de nuevo para atender a otra actualización de alta prioridad. Además, en la segunda representación de alta prioridad, como la anterior representación de baja prioridad no pudo terminar, todavía estamos viendo el primer valor de filtro diferido. Esto nos muestra que, en las representaciones de baja prioridad, todos los valores están actualizados, independientemente de su origen. Sin embargo, en las representaciones de alta prioridad, los valores diferidos pueden estar desactualizados. Esta vez, somos capaces de terminar la representación de baja prioridad antes de que escribamos algo más. Así que como puedes ver, en la lista filtrada, la interfaz de usuario se actualiza en consecuencia. De hecho, déjame volver atrás, para que puedas ver esto sucediendo. Como antes, no hay ningún filtrado en absoluto, porque nunca terminamos ninguna representación de baja prioridad que actualice la lista. Y ahora, por primera vez, hemos terminado la representación de baja prioridad. Y porque hicimos eso, puedes ver que la lista se actualizó realmente. Siguiendo adelante, escribimos una tercera letra, que, una vez más, desencadena una representación de alta prioridad.
Comments