Componentes React Polimórficos para el Cliente y el Servidor

Rate this content
Bookmark

Explora los Componentes del Servidor a través de la lente de Componentes de IU reutilizables, donde todo "depende" de los requisitos individuales del caso de uso y las necesidades individuales de la aplicación. En lugar de luchar entre 'servidor' y 'cliente', tengamos lo mejor de ambos mundos.

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

Kiril Peyanski
Kiril Peyanski
10 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola, mi nombre es Kirill y tengo una pequeña obsesión con los componentes de IU. Hablemos de React, específicamente de los Componentes del Servidor React 19. Te mostraré cómo construir una tabla de datos polimórfica utilizando componentes del servidor. Exploraremos la mezcla de componentes del servidor y del cliente y aplicaremos el patrón de composición. Discutiremos los componentes polimórficos y separaremos la lógica del cliente para renderizar componentes personalizados sin romper la funcionalidad del cliente. El componente se puede utilizar en diferentes entornos, transformándose en componentes del servidor o del cliente según corresponda. Esta charla se centra en la construcción de un componente polimórfico con un tamaño de paquete mínimo y acceso a las API tanto del servidor como del cliente.

1. Introducción a los Componentes del Servidor de React 19

Short description:

Hola, mi nombre es Kirill y tengo una pequeña obsesión con los componentes de UI. Hablemos de React, más específicamente, la nueva edición de React 19, los Componentes del Servidor. Cuando los Componentes del Servidor salieron inicialmente, prometieron un tamaño de paquete más pequeño, mejor rendimiento y una mejora en la obtención de datos. Hoy quiero mostrarte cómo construí lo que llamo una tabla de datos polimórfica, un componente único que se puede utilizar en el cliente y como un componente del servidor.

Hola, mi nombre es Kirill y tengo una pequeña obsesión con los componentes de UI. De hecho, hago esto a tiempo completo en Progress, construyendo la próxima generación de la biblioteca CanDo React. Durante mi tiempo libre, me encanta explorar el espacio del sistema de diseño, y actualmente estoy construyendo un marco de sistema de diseño al que llamo BackerUI.

Pero basta de mí. Hablemos de React, y más específicamente, la nueva edición de React 19, los Componentes del Servidor, que si me preguntas, deberían haberse llamado simplemente Componentes de React. Pero de todos modos, cuando los Componentes del Servidor salieron inicialmente, prometieron un tamaño de paquete más pequeño, un mejor rendimiento y una mejora en la obtención de datos, lo que me llevó a creer que debería reescribir toda mi interfaz de usuario para usar los Componentes del Servidor. Resultó ser una idea realmente mala, incluso Lee Robinson tuvo que tuitear que los componentes del cliente están bien. En algún momento, incluso tuve un botón del servidor. Se veía exactamente como un botón regular, pero era en su mayoría inútil porque no tenía un evento de clic. Terminé manteniendo mis componentes del cliente.

Pero en el camino, me di cuenta de que tenía una variante del cliente y del servidor de algunos de mis componentes. En teoría, una tabla de datos podría beneficiarse enormemente al ser un componente del servidor, pero aún necesitaba proporcionar interactividad para implementar paneles de control más dinámicos o carritos de compras de comercio electrónico. Hoy quiero mostrarte cómo construí lo que llamo una tabla de datos polimórfica, un componente único que se puede utilizar en el cliente y como un componente del servidor. Pero antes de eso, asegurémonos de que todos estemos visualizando lo mismo cuando pensamos en una tabla de datos. Una tabla de datos generalmente muestra datos tabulares. Puede tener un encabezado, un cuerpo, múltiples filas con celdas en su interior que muestran datos formateados. Genial. Ahora estamos en la misma página. Pero aún terminé con dos componentes de UI muy similares.

Una tabla de datos del servidor, que solo enviaba HTML al cliente, tenía acceso a mi sistema de archivos e incluso a una instancia de base de datos. Y un componente del cliente, que era interactivo. Podía editar, ordenar y filtrar los datos sin tener que volver al servidor y tenía acceso a las API del navegador y al DOM. Por lo general, si estuviera construyendo mis publicaciones de blog personales, estaría perfectamente bien tener dos componentes de UI muy similares con diferentes propósitos. Sin embargo, si eres como yo y estás construyendo una biblioteca de UI reutilizable, ya sea de código abierto o algo para otros equipos en tu organización, hay algunas cosas que debes considerar. Primero está la duplicación de código. Probablemente no quieras mantener dos bases de código separadas que hacen casi lo mismo, renderizando un par de filas con celdas en su interior. Segundo, está cómo los consumidores de tu biblioteca modificarían aún más para cumplir con sus requisitos. Muchas aplicaciones tienen necesidades individuales que pueden requerir una combinación de código del servidor y del cliente, personalizando todas las partes de tu componente en el camino. Y por último, los requisitos cambian. Siempre lo hacen.

Read also

2. Mezclando Componentes del Servidor y del Cliente

Short description:

Alguien que comienza con el componente del servidor debería poder agregar fácilmente interactividad más adelante sin tener que reemplazar todo el componente. Veamos cómo se vería el árbol de renderizado de una tabla de datos y veamos si podemos aplicar el patrón de composición allí. La mayor parte del árbol de renderizado no podrá utilizar componentes del servidor.

Alguien que comienza con el componente del servidor debería poder agregar fácilmente interactividad más adelante sin tener que reemplazar todo el componente. Ha surgido un patrón específico para ayudarnos a mezclar y combinar componentes del servidor y del cliente. Probablemente hayas visto este diagrama al hablar del patrón de composición.

Todo parece bien en teoría, pero a menudo se aplica a nivel de aplicación. Cuando nos enfocamos en el nivel del componente, las bibliotecas de UI suelen estar en modo cliente completo, lo que disminuye los beneficios de usar componentes del servidor. Veamos por un momento cómo se vería el árbol de renderizado de una data tabla y veamos si podemos aplicar el patrón de composición allí. Si has intentado implementar una tabla de data antes, rápidamente te darás cuenta de que necesitas código del cliente en casi cualquier parte del árbol. Ya sea para accessibility o para agregar una función simple de selección de filas, la mayor parte del árbol de renderizado no podrá utilizar componentes del servidor en absoluto.

Esto es problemático porque los consumidores de tu tabla de data aún pueden querer mantener parte del renderizado en el servidor. Pero según las reglas de los componentes del servidor, sabemos que si bien los componentes del servidor pueden renderizar componentes del cliente, lo contrario no es cierto. Sin embargo, hay una forma de lograr esto pasando todo a través de la propiedad de children pod, pero lo exploraremos en un minuto. Ahora, volvamos a nuestra tabla de data.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
React Summit 2022React Summit 2022
17 min
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
Top Content
Today's Talk discusses building flexible, resilient, and future-proof React components using composition and configuration approaches. The composition approach allows for flexibility without excessive conditional logic by using multiple components and passing props. The context API can be used for variant styling, allowing for appropriate styling and class specification. Adding variants and icons is made easy by consuming the variant context. The composition and configuration approaches can be combined for the best of both worlds.
Patrones de Arquitectura Remix
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Patrones de Arquitectura Remix
Top Content
This Talk introduces the Remix architecture patterns for web applications, with over 50% of participants using Remix professionally. The migration from single page applications to Remix involves step-by-step refactoring and offers flexibility in deployment options. Scalability can be achieved by distributing the database layer and implementing application caching. The backend for frontend pattern simplifies data fetching, and Remix provides real-time capabilities for collaborative features through WebSocket servers and Server-SendEvents.

Workshops on related topic

IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Masterclass de alto rendimiento Next.js
React Summit 2022React Summit 2022
50 min
Masterclass de alto rendimiento Next.js
Workshop
Michele Riva
Michele Riva
Next.js es un marco convincente que facilita muchas tareas al proporcionar muchas soluciones listas para usar. Pero tan pronto como nuestra aplicación necesita escalar, es esencial mantener un alto rendimiento sin comprometer el mantenimiento y los costos del servidor. En este masterclass, veremos cómo analizar el rendimiento de Next.js, el uso de recursos, cómo escalarlo y cómo tomar las decisiones correctas al escribir la arquitectura de la aplicación.