Aplicaciones como Facebook, TikTok, Instagram, han popularizado la idea de un feed que nunca termina, es infinito. La forma en cómo funciona es que inicialmente se cargan en una lista, los primeros registros a mostrar y conforme el usuario se acerca al fin de la página, se cargan nuevos datos.
Por experiencia propia, quizás te recuerdes navegando de arriba a abajo por varios minutos u horas en una de estas aplicaciones. En ese tiempo, la aplicación ha comunicado muchísimas publicaciones entre tu computadora y el servidor de datos, toda esta información es visible en porciones, dependiendo de si haces scroll hacia abajo o hacia arriba en la página, por lo que se deben implementar estrategias para cuidar el rendimiento, sin afectar la experiencia de usuario.
Uno de los patrones existentes para manejar listas grandes en un control de scroll infinito, es guardar de manera virtual los elementos de la lista que no se ven, y mostrar únicamente los que están en el área visible. Sistemas de UI como el de Android o iOs, implementan esta característica de manera nativa, sin embargo, para la web es necesario hacer este trabajo.
El resultado de no implementar una estrategia como la mencionada, es una página llena de nodos del DOM, la gran mayoría de ellos no visibles, que terminan por alentar la página y el dispositivo en general. Ya que el navegador debe tener control de todos estos nodos aún cuando no están visibles.
Decimos que virtualizamos una lista de scroll infinito, cuando almacenamos en una estructura como un arreglo, la información y los elementos de cada fila de la lista, traduciendo a nodos del DOM, sólo aquellas filas que están en la porción visible del scroll, y manteniendo en memoria virtual aquellos que no.
Conforme el usuario se mueve en la página, los nodos del DOM existentes se sustituyen por las filas que deberían aparecer visibles.
Todo esto implica un enorme trabajo de coordinación, cálculo de distancias y medidas, reemplazo eficiente de nodos y mucho más. Implementar una estrategia como ésta por cuenta propia, puede ser un trabajo muy propenso a errores.
Afortunadamente, existen soluciones Open Source disponibles, para el caso de React, existe React Virtualize, React lazyload, React Infinite, etc. en el resto de éste bloque, usaremos React Virtualize en la implementación de scroll infinito.
Continuemos.
-
Módulo 1 | 6 clases
Introducción
expand_more-
play_circle_outline
Clase 1
1.- Introducción al curso de Single Page Apps con React
-
play_circle_outline
Clase 2
Conocimientos previos [Curso React SPA]
-
play_circle_outline
Clase 3
Cómo instalar Node.js en Windows
-
play_circle_outline
Clase 4
Cómo instalar Node.js en Mac
-
play_circle_outline
Clase 5
Configurar el servicio web
-
play_circle_outline
Clase 6
Iniciar el proyecto con create-react-app
-
-
Módulo 2 | 8 clases
Routing en el cliente
expand_more-
play_circle_outline
Clase 1
Router del cliente
-
play_circle_outline
Clase 2
Configurar react-router v6
-
play_circle_outline
Clase 3
Definir rutas
-
play_circle_outline
Clase 4
Links de navegación
-
play_circle_outline
Clase 5
Rutas anidadas
-
play_circle_outline
Clase 6
Navegación con JavaScript
-
play_circle_outline
Clase 7
Leyendo parámetros
-
play_circle_outline
Clase 8
Ranking de rutas
-
-
Módulo 3 | 13 clases
Autenticación de usuarios
expand_more-
play_circle_outline
Clase 1
Qué es Redux
-
play_circle_outline
Clase 2
Flujo de cambios en Redux
-
play_circle_outline
Clase 3
Terminología en Redux
-
play_circle_outline
Clase 4
Instalar y configurar redux
-
play_circle_outline
Clase 5
Redux devtools
-
play_circle_outline
Clase 6
Mocking de autenticación
-
play_circle_outline
Clase 7
createSlice explicado
-
play_circle_outline
Clase 8
Redux thunks
-
play_circle_outline
Clase 9
Registro de usuarios
-
play_circle_outline
Clase 10
Inicio de sesión
-
play_circle_outline
Clase 11
Cerrar sesión
-
play_circle_outline
Clase 12
Persistencia de datos
-
play_circle_outline
Clase 13
Whitelist y blacklist redux-persist
-
-
Módulo 4 | 10 clases
Consumir servicios web
expand_more-
play_circle_outline
Clase 1
Crear el reducer para videos
-
play_circle_outline
Clase 2
Autenticación del servidor con JWT
-
play_circle_outline
Clase 3
Obtener videos
-
play_circle_outline
Clase 4
Formulario para subida de archivos
-
play_circle_outline
Clase 5
Subida de archivos
-
play_circle_outline
Clase 6
Mostrar videos
-
play_circle_outline
Clase 7
Configurar el reproductor de video
-
play_circle_outline
Clase 8
Mostrar videos individualmente
-
play_circle_outline
Clase 9
Perfil de usuario
-
play_circle_outline
Clase 10
Postear likes en un video
-
-
Módulo 5 | 19 clases
Styled components
expand_more-
play_circle_outline
Clase 1
CSS in JS [React Single Page Apps]
-
play_circle_outline
Clase 2
Fundamentos y configuración de styled components
-
play_circle_outline
Clase 3
Trabajando con props
-
play_circle_outline
Clase 4
Extendiendo estilos de otros componentes
-
play_circle_outline
Clase 5
Props y atributos
-
play_circle_outline
Clase 6
Nesting
-
play_circle_outline
Clase 7
Bloques reusables de CSS
-
play_circle_outline
Clase 8
Configurando un tema
-
play_circle_outline
Clase 9
Layout de la app
-
play_circle_outline
Clase 10
Estilizando la página de videos
-
play_circle_outline
Clase 11
Botones del vídeo
-
play_circle_outline
Clase 12
Navegación del encabezado y del pie de página
-
play_circle_outline
Clase 13
Formulario de inicio de sesión
-
play_circle_outline
Clase 14
Mostrar navegación y footer condicionalmente
-
play_circle_outline
Clase 15
Registro de usuario y rutas condicionales
-
play_circle_outline
Clase 16
Vista de la subida de archivos
-
play_circle_outline
Clase 17
Vista del perfil de usuarios
-
play_circle_outline
Clase 18
Botón para cerrar sesión
-
play_circle_outline
Clase 19
Vista individual de videos
-
-
Módulo 6 | 7 clases
Scroll infinito
expand_more-
play_arrow
Clase 1
Los desafíos de implementar scroll infinito
-
play_circle_outline
Clase 2
Configurando Infnite Loader y List
-
play_circle_outline
Clase 3
Mostrar videos en el contenedor de carga infinita
-
play_circle_outline
Clase 4
Paginación de videos
-
play_circle_outline
Clase 5
Integrar paginación con el contenedor de carga infinita
-
play_circle_outline
Clase 6
React Devtools
-
play_circle_outline
Clase 7
Detalles finales de la carga infinita
-
-
Módulo 7 | 4 clases
Deploy a producción
expand_more -
check_circle_outlineMódulo 8
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-