Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro

Rate this content
Bookmark

Existen muchas formas de autorizar componentes en React, y hacerlo correctamente puede no ser tan fácil, especialmente cuando los componentes se vuelven más complejos. En esta charla, aprenderás cómo construir componentes React a prueba de futuro. Cubriremos dos enfoques diferentes para construir componentes - Composición y Configuración, para construir el mismo componente utilizando ambos enfoques y explorar sus ventajas y desventajas.

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

FAQ

Tomasz Findly es un desarrollador web y móvil full-stack con 10 años de experiencia en programación. Es co-propietario de Findly WebTech, mentor y consultor en CodeMentor.io, y autor de varios libros sobre React.

Los dos enfoques principales para construir componentes en React que menciona Tomasz son la composición y la configuración.

El enfoque de configuración puede hacer que el código sea difícil de mantener y extender debido a la necesidad de agregar más props y lógica condicional a medida que se incorporan nuevas funcionalidades y variantes.

Para aumentar la flexibilidad de un componente de alerta en React, se pueden agregar props adicionales como encabezado, variante e ícono, y usar la API de contexto para gestionar estilos y variantes en diversos componentes.

El enfoque de composición consiste en usar bloques de construcción modulares para armar la funcionalidad del componente. Ofrece alta flexibilidad y facilita la extensión de funcionalidades sin necesidad de sobrescribir componentes.

Las desventajas incluyen la necesidad de mayor conocimiento sobre cómo funcionan y se componen los bloques de construcción, junto con un mayor esfuerzo y tiempo para configurar los componentes. Además, puede ser más fácil desviarse del diseño sistemático y generar inconsistencias en la UI.

Se pueden combinar los enfoques utilizando primero la composición para crear los bloques básicos y después usar estos bloques para configurar componentes más complejos. Esto permite mantener la flexibilidad mientras se simplifica la utilización de componentes.

Thomas Findlay
Thomas Findlay
17 min
21 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy discute la construcción de componentes React flexibles, resilientes y a prueba de futuro utilizando enfoques de composición y configuración. El enfoque de composición permite flexibilidad sin lógica condicional excesiva mediante el uso de múltiples componentes y el paso de props. La API de contexto se puede utilizar para el estilo de variantes, permitiendo un estilo y especificación de clase apropiados. Agregar variantes e iconos se facilita al consumir el contexto de variantes. Los enfoques de composición y configuración se pueden combinar para lo mejor de ambos mundos.

1. Construyendo Componentes React Flexibles y Resilientes

Short description:

Hoy, discutiré cómo construir componentes flexibles, resilientes y a prueba de futuro en React. Exploraremos dos enfoques: composición y configuración. Construir componentes a prueba de futuro puede ser un desafío a medida que la complejidad crece. Agregar características como encabezados, variantes e iconos requiere una cuidadosa consideración de las props y los estilos.

Hey, hoy voy a hablar sobre cómo construir componentes flexibles, resilientes y a prueba de futuro en React. Voy a cubrir dos enfoques diferentes para construir componentes, composición y configuración. Pero primero, permíteme contarte un poco sobre mí. Mi nombre es Tomasz Findly y soy un desarrollador web y móvil full-stack con 10 años de experiencia en programación. Soy co-propietario de Findly WebTech, así como mentor y consultor en la plataforma CodeMentor.io. Además de eso, soy el autor de React, el Camino a Enterprise y Viewed el Camino a Enterprise libros. También escribo artículos para Telerik y los blogs de Camino a Enterprise. Bueno, eso es suficiente sobre mí. Ahora, los componentes. Entonces, seamos honestos. Construir componentes a prueba de futuro no es fácil. Quiero decir, bueno, si tienes un componente como este, es muy simple. Así que para este ejemplo, usaré un componente de alerta. Entonces, por ejemplo, si quisieras tener un componente de alerta que mostrara un mensaje de alerta básico, bueno, podríamos hacer algo como esto, ¿verdad? Podríamos recibir entradas de texto como props, tener algunos divs con estilos, y luego renderizar lo que se pasó, ¿verdad? Y así es como podríamos usarlo. Solo usa el componente de alerta y pasa el mensaje de texto dentro de él. Entonces, obviamente, eso es muy simple, pero el problema con la construcción de buenos componentes es que, a medida que necesitamos agregar más funcionalidad, la complejidad simplemente crece, ¿verdad? El code se está volviendo mucho más difícil de mantener y extender. Entonces, ¿qué pasaría si quisiéramos agregar más características a este componente de alerta? Digamos que solo queremos agregar un encabezado también. Entonces podríamos recibir un encabezado como una prop, y si se pasó uno, lo mostraríamos, ¿verdad? Como se muestra aquí en el ejemplo. Entonces, por ejemplo, en el lado derecho, tenemos una alerta solo con y la otra con tanto el encabezado de la alerta como el mensaje de texto. Así que eso sigue siendo bastante simple. Ahora, ¿qué pasa con las variantes? Bueno, supongo que podríamos agregar otra prop, como variante, ¿verdad? Y luego, en función de esa prop, y cualquiera que fuera la variante seleccionada, podríamos agregar estilos apropiados. Entonces, por ejemplo, podríamos admitir variantes como éxito, peligro, advertencia o información, como puedes ver en el lado derecho. Y así es como lo usaríamos. Solo pasa las props de encabezado y variante y algo de texto dentro.

Entonces, ¿qué pasa si agregamos, tal vez, un ícono? Bueno, de nuevo, otra prop, como ícono. Si se pasó, y encontramos un ícono compatible, entonces podemos renderizarlo. Simple, ¿no es así? Y así es como podríamos usarlo. Entonces, básicamente, por defecto, el ícono podría mostrarse a la izquierda Pero, ¿qué pasa si queremos especificar en qué lado queremos que se muestre? ¿Como, tal vez no a la izquierda, sino a la derecha? Bueno, ¿adivina qué? ¡Otra prop! Entonces, por ejemplo, podríamos pasar una prop como posición del ícono, ¿verdad? Por defecto podríamos establecerlo a la izquierda. Y luego, si, por ejemplo, era a la derecha, podríamos especificar algunas clases, ¿verdad?, que se agregarían en el contenedor de alerta. Ten en cuenta que estoy usando Tailwind aquí para las clases.

2. Usando la Composición para Flexibilidad

Short description:

El enfoque de configuración puede volverse problemático cuando agregar más funcionalidad requiere agregar más props y lógica condicional. Se vuelve más difícil extender o sobrescribir la lógica del componente. Por otro lado, la composición ofrece un enfoque diferente. Al usar múltiples componentes y pasar props, podemos lograr flexibilidad sin una lógica condicional excesiva. En el ejemplo, el componente de alerta se compone de los componentes de envoltura de alerta, contenido de alerta y cuerpo de alerta, lo que permite un mayor control y una extensión más fácil.

Y sí, así es como lo usaríamos, solo más props. Entonces, ese fue el enfoque de configuración, ¿verdad? Básicamente, cada vez que necesitamos agregar más funcionalidad, agregamos más props. Pero, bueno, eso puede ser problemático en algún momento. Porque lo que pasa es que, para cada nueva variante y funcionalidad, necesitamos agregar más y más props y lógica condicional, ¿verdad?

Y a veces puede ser mucho más difícil sobrescribir la lógica ya definida dentro de un componente o incluso extenderlo. Entonces, eso no es realmente lo mejor. El enfoque de configuración lo hace mucho más difícil. Entonces, a veces, si un componente no puede ser extendido, podríamos necesitar construir una nueva versión de él. Bueno, en cuanto a las ventajas, obviamente un enfoque de configuración, bueno, un componente construido con un enfoque de configuración es rápido y fácil de usar, ¿verdad? Porque solo necesitas saber qué props están realmente disponibles y qué necesitas proporcionar. Entonces, sí. Básicamente, diferentes funcionalidades y variantes visuales pueden ser controladas a través de props y eso es todo. Y otro beneficio de eso es que es mucho más difícil desviarse del sistema de design, ¿verdad? Porque lo que pasa es que solo puedes proporcionar props y eso es todo. No puedes hacer realmente nada más con él. Entonces, bueno, esto mantiene la UI y el comportamiento consistentes.

Pero, sí, como mencioné, el problema es que no podemos extender fácilmente el componente de construcción de configuración o sobrescribirlo. Entonces, ¿qué podemos hacer? Bueno, quiero decir que obviamente podríamos proporcionar tal vez props como, digamos, un render icon, render header, ya sabes, render body y así sucesivamente. Pero de nuevo, más props serían solo más desordenados. Entonces, habría más lógica condicional dentro del componente de alerta. Entonces, en lugar de intentar configurar todo, ¿qué tal si usamos un enfoque diferente, la composición. Entonces, en este ejemplo, tenemos tres componentes. Primero, el envoltorio de alerta, luego el contenido de alerta y el cuerpo de alerta. Y al cuerpo de alerta, le pasamos el mensaje de texto. Sé que tres componentes solo para el mensaje de texto es un poco mucho, pero quédate conmigo. Entonces, ¿cómo podría verse? Básicamente, el componente de alerta, obviamente, recibiría algunas props. Luego renderizaría un div con estilos apropiados y children, ¿verdad? Entonces, en este caso, los children serían el contenido de alerta y el cuerpo de alerta. Luego tenemos el contenido de alerta. Como ves, es muy similar al componente de alerta. Porque, de nuevo, solo recibe las props. Y tiene un div con algunos estilos. Y en realidad, bueno, lo mismo se aplicaría al cuerpo de alerta. Sé que hay un poco de repetición,

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.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
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.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
Estudio de caso: Construcción de componentes React reutilizables accesibles en GitHub
React Summit 2024React Summit 2024
29 min
Estudio de caso: Construcción de componentes React reutilizables accesibles en GitHub
The talk discusses building accessible React components and emphasizes the importance of using the correct HTML elements and ARIA roles for accessibility. It explains how to navigate and select options within a form and how to add supplementary text using Aria described by. The speaker also discusses the benefits of using conditional checkboxes and ARIA disabled to improve the UI. Additionally, the talk explores the role of JavaScript in web accessibility and provides recommendations for testing website accessibility.

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.
Construye un Tablero Rico en Datos y Hermoso con la Rejilla de Datos de MUI X y Joy UI
React Summit 2023React Summit 2023
137 min
Construye un Tablero Rico en Datos y Hermoso con la Rejilla de Datos de MUI X y Joy UI
Top Content
WorkshopFree
Sam Sycamore
Siriwat (Jun) Kunaporn
2 authors
Aprende cómo utilizar el ecosistema completo de MUI para construir un tablero de gestión de proyectos hermoso y sofisticado en una fracción del tiempo que tomaría construirlo desde cero. En particular, veremos cómo integrar la Rejilla de Datos de MUI X con Joy UI, nuestra biblioteca de componentes más nueva y hermana del estándar de la industria Material UI.
Tabla de contenidos:- Presentando nuestro proyecto y herramientas- Configuración de la aplicación e instalación del paquete- Construcción del tablero- Prototipado, estilos y temas - Características de Joy UI- Filtrado, ordenación, edición - Características de la Rejilla de Datos- Conclusión, pensamientos finales, P&R
Práctica con la Rejilla de Datos React de AG Grid
React Summit 2022React Summit 2022
147 min
Práctica con la Rejilla de Datos React de AG Grid
Top Content
WorkshopFree
Sean Landsman
Sean Landsman
Comienza con la Rejilla de Datos React de AG Grid con un tutorial práctico del equipo central que te llevará a través de los pasos para crear tu primera rejilla, incluyendo cómo configurar la rejilla con propiedades simples y componentes personalizados. La edición comunitaria de AG Grid es completamente gratuita para usar en aplicaciones comerciales, por lo que aprenderás una herramienta poderosa que puedes agregar inmediatamente a tus proyectos. También descubrirás cómo cargar datos en la rejilla y diferentes formas de agregar renderizado personalizado a la rejilla. Al final de la masterclass, habrás creado una Rejilla de Datos React de AG Grid y personalizado con componentes React funcionales.- Comenzando e instalando AG Grid- Configurando ordenación, filtrado, paginación- Cargando datos en la rejilla- La API de la rejilla- Usando hooks y componentes funcionales con AG Grid- Capacidades de la edición comunitaria gratuita de AG Grid- Personalizando la rejilla con Componentes React
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
TypeScript Congress 2023TypeScript Congress 2023
131 min
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
Workshop
Maurice de Beijer
Maurice de Beijer
En esta masterclass práctica, Maurice te guiará personalmente a través de una serie de ejercicios diseñados para empoderarte con una profunda comprensión de los Componentes de Servidor React y el poder de TypeScript. Descubre cómo optimizar tus aplicaciones, mejorar el rendimiento y desbloquear nuevas posibilidades.
 
Durante la masterclass, realizarás:
- Maximizar la mantenibilidad y escalabilidad del código con prácticas avanzadas de TypeScript
- Desatar los beneficios de rendimiento de los Componentes de Servidor React, superando enfoques tradicionales
- Potenciar tu TypeScript con el poder de los Tipos Mapeados
- Hacer tus tipos TypeScript más seguros con Tipos Opacos
- Explorar el poder de los Tipos de Plantillas Literales al usar Tipos Mapeados
 
Maurice estará virtualmente a tu lado, ofreciendo una guía completa y respondiendo a tus preguntas mientras navegas por cada ejercicio. Al final de la masterclass, habrás dominado los Componentes de Servidor React, armado con un nuevo arsenal de conocimientos de TypeScript para potenciar tus aplicaciones React.
 
No pierdas esta oportunidad de elevar tu experiencia en React a nuevas alturas. Únete a nuestra masterclass y desbloquea el potencial de los Componentes de Servidor React con TypeScript. Tus aplicaciones te lo agradecerán.
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.
Aprende a utilizar Composables: La navaja suiza de los desarrolladores de Vue
Vue.js Live 2024Vue.js Live 2024
163 min
Aprende a utilizar Composables: La navaja suiza de los desarrolladores de Vue
Workshop
Juan Andrés Núñez Charro
Juan Andrés Núñez Charro
Los Composables (funciones de composición) son funciones con estado/sin estado que pueden aprovechar la API de reactividad de Vue, desacoplándola de los componentes.Este cambio de perspectiva abre la posibilidad de abordar escenarios comunes de una manera nueva y creativa. En este masterclass, aprenderás cómo resolver problemas típicos que enfrenta cada desarrollador de Vue, utilizando composables:
- Almacenamiento de datos;- Comunicación entre componentes;- Funciones de utilidad (DOM, API, etc);Y más.