驴Por qu茅 se retrasa tanto?
Si, al representar una tabla enorme con alg煤n tipo de animaci贸n de transici贸n, no se hace nada m谩s, la aplicaci贸n se retrasar谩 y el usuario sufrir谩.
En la mayor铆a de los casos, cuando usamos el detector de eventos para crear una tabla con desplazamiento infinito, no solo necesitamos realizar c谩lculos relacionados con la ventana gr谩fica y la altura de la fila, sino que tambi茅n escribimos mucha l贸gica en el controlador de desplazamiento para evitar volver a dibujar con demasiada frecuencia, ya que cada desplazamiento de devoluci贸n de llamada llame a setState
.
El c贸digo ser铆a algo como esto:
componentDidMount() { window.addEventListener('scroll', this.handleScroll) } handleScroll(e) {
Pero hay otro enfoque para implementar el desplazamiento infinito de una tabla, sin saber nada acerca de los valores de ventana o l铆mite.
Este es un IntersectionObserver . Definici贸n de w3c :
Esta especificaci贸n describe una API que se puede utilizar para averiguar la visibilidad y la posici贸n de los elementos DOM ("objetivos") en relaci贸n con los elementos contenidos en ellos.
Cuando utilice este m茅todo, no necesita saber la altura de la l铆nea, la parte superior de la ventana gr谩fica ni ning煤n otro valor para hacer los c谩lculos.
El concepto es organizar los anclajes con 铆ndices en cada punto de control y cada vez que se activa el ancla, obtenga el valor del 铆ndice y vuelva a dibujar la tabla. Gracias a esto, no necesita hacer magia matem谩tica con una altura DOM y una ventana gr谩fica.
Activador de anclaje para el 铆ndice 1
Renderizar m谩s l铆neas
El c贸digo con IntersectionObserver
ser谩 algo como esto.
handleSentinel = (c) => { if(!this.observer) {