Entonces, React Fiber elimina esencialmente la necesidad de procesar actualizaciones de manera recursiva y sincrónica. En cambio, permite que React aproveche la programación y priorización, lo que nos permite pausar el trabajo y reanudarlo más tarde, asignar diferentes prioridades a diferentes tipos de trabajo y reutilizar o descartar el trabajo calculado previamente. Por ejemplo, en nuestra demostración, React podría mantener el campo de entrada receptivo para el usuario, lo que significa que el usuario vería lo que está escribiendo de inmediato, ya que tendría una prioridad más alta que la lista de elementos que deben renderizarse. Luego, cuando el usuario no hace nada, es decir, no bloquea el hilo principal, React puede renderizar y mostrar esa lista de elementos.
Entonces, eso suena genial, ¿verdad? Bueno, veámoslo en acción. Esta es la misma aplicación que teníamos antes. La única diferencia es que importamos el hook useDeferredValue aquí y le pasamos la variable de estado de texto junto con un objeto con el tiempo de espera establecido en 2000 milisegundos, que es igual a dos segundos. Ahora, estamos pasando la variable de estado de texto a nuestro campo de entrada porque queremos estar actualizados con lo que estamos escribiendo, pero a MySlowList le estamos pasando esa variable de texto diferido, porque, bueno, ya lo verás. Ahora, escribiré React Conference nuevamente y realmente no puedes verlo, pero a medida que escribo, veo los caracteres que se escriben en el campo. Pero la lista se está quedando atrás en cuanto a lo que se renderiza. Lo haré de nuevo. Como puedes ver, terminé de escribir y ahora la lista se está poniendo al día lentamente en la renderización, ¿verdad?
El hook useDeferredValue envuelve un valor de prop o estado y recibe el tiempo máximo de espera diferido. Esto básicamente le dice a React que está bien que los componentes que dependen de este valor se rendericen en un momento posterior. Se utiliza comúnmente para mantener la interfaz receptiva cuando tienes algo que se renderiza de inmediato según la entrada del usuario, como en nuestra demostración aquí. Por ejemplo, con este código, básicamente decimos que necesitamos mostrar el texto en el campo de entrada tan pronto como el usuario lo escriba. Necesitamos ver exactamente lo que escriben, pero cuando se trata de la lista, está bien si tarda hasta dos segundos en ponerse al día con lo que necesita renderizar.
Entonces, entendamos qué es un objeto Fiber, no el algoritmo, los objetos. Un Fiber también es un objeto JavaScript que contiene información sobre un componente, su entrada y su salida. También corresponde a una instancia de un componente. Hay muchos campos en FiberNode, esta no es una lista exhaustiva en ningún sentido, pero solo para darte una idea general, puedes ver que hay información sobre los hijos del componente, si tiene hermanos, actualizaciones pendientes, props pendientes, estado pendiente, prioridad de trabajo y mucho más. En cuanto al algoritmo Fiber, tiene dos fases, reconciliación y confirmación. La reconciliación es interrumpible, lo que significa que podemos pausarla y reanudarla cuando queramos, y la confirmación no es interrumpible, lo que significa que una vez que la iniciamos, no podemos detenerla. Tenemos que dejar que termine. Durante el renderizado inicial, cada elemento de React que se devuelve desde la llamada a la función de renderizado se convierte en un Fiber. Y cuando un elemento de React se convierte en un nodo Fiber por primera vez, React utiliza ese dato, ese Fiber que se creó a partir de la llamada. Básicamente, el elemento de React se convierte en un Fiber y luego ese Fiber se coloca en un árbol que se llama current. Aquí puedes ver un ejemplo específico para el elemento de entrada, pero esto, por supuesto, también ocurre para todos los demás nodos en el árbol actual.
Comments