Nuestra aplicación utiliza el desplazamiento infinito para navegar por grandes listas de elementos heterogéneos. Hay algunas arrugas:
- Es común que nuestros usuarios tengan una lista de 10,000 elementos y necesiten desplazarse por más de 3000.
- Estos son elementos ricos, por lo que solo podemos tener unos pocos cientos en el DOM antes de que el rendimiento del navegador sea inaceptable.
- Los artículos son de diferentes alturas.
- Los artículos pueden contener imágenes y permitimos al usuario saltar a una fecha específica. Esto es complicado porque el usuario puede saltar a un punto en la lista donde necesitamos cargar imágenes sobre la ventana gráfica, lo que empujaría el contenido hacia abajo cuando se carguen. No manejar eso significa que el usuario puede saltar a una fecha, pero luego cambiar a una fecha anterior.
Soluciones conocidas e incompletas:
( react-infinite-scroll ) - Este es solo un simple componente de "carga más cuando tocamos el fondo". No elimina ninguno de los DOM, por lo que morirá en miles de elementos.
( Posición de desplazamiento con React ): muestra cómo almacenar y restaurar la posición de desplazamiento al insertar en la parte superior o al insertar en la parte inferior, pero no ambos juntos.
No estoy buscando el código para una solución completa (aunque eso sería genial). En cambio, estoy buscando la "forma de Reaccionar" para modelar esta situación. ¿Es el estado de la posición de desplazamiento o no? ¿Qué estado debo seguir para mantener mi posición en la lista? ¿Qué estado debo mantener para activar un nuevo procesamiento cuando me desplazo cerca de la parte inferior o superior de lo que se representa?
eche un vistazo a http://adazzle.github.io/react-data-grid/index.html# Esto parece una cuadrícula de datos potente y de alto rendimiento con funciones similares a Excel y carga diferida / representación optimizada (para millones de filas) con ricas funciones de edición (con licencia MIT). Aún no se ha probado en nuestro proyecto, pero lo haremos muy pronto.
Un gran recurso para buscar cosas como estas también es http://react.rocks/ En este caso, una búsqueda de etiquetas es útil: http://react.rocks/tag/InfiniteScroll
fuente
Enfrentaba un desafío similar para modelar el desplazamiento infinito en una sola dirección con alturas de elementos heterogéneos y, por lo tanto, hice un paquete npm con mi solución:
https://www.npmjs.com/package/react-variable-height-infinite-scroller
y una demostración: http://tnrich.github.io/react-variable-height-infinite-scroller/
Puede consultar el código fuente de la lógica, pero básicamente seguí la receta @Vjeux descrita en la respuesta anterior. Todavía no he abordado el salto a un elemento en particular, pero espero implementarlo pronto.
Aquí está el meollo de cómo se ve el código actualmente:
fuente