Pequeños Fragmentos de Diseño Iterativo de Componentes

Rate this content
Bookmark

¿Cómo se ve una API de componente bien diseñada? ¿A menudo te encuentras bifurcando componentes en lugar de extenderlos? ¿Deberías usar props, hooks o composición? En esta charla relámpago, abordaré errores comunes en el diseño de componentes y compartiré ideas de mi experiencia como mantenedor del framework de código abierto de Shopify, Hydrogen, y de la construcción de sistemas de diseño escalables en Personio. Al final, presentaré un marco que utilizo para iterar y crear APIs efectivas.

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

Daniel Rios Pavia
Daniel Rios Pavia
10 min
13 Dec, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola a todos. Mi nombre es Daniel, y me gustan las rocas. Soy líder de sistemas de diseño en Personia y algo que también me gusta, que es un poco nerd, es la matemática. Me gusta la matemática. Hay muchas maneras de resolver un problema. Una forma de construirlo en una API es hacerlo con props. La siguiente posible forma podría ser componentes composables. ¿Cuál es mejor? La respuesta de un ingeniero senior sería, bueno, depende. Los props son realmente buenos con TypeScript. Por otro lado, la composición... Podrías tener otros tipos de componentes. Podrías crear otros tipos y ponerlos y aún funcionarían. Digamos que quiero envolverlo en un tooltip. Puedes ver un poco las diferencias en el enfoque. Este es un diseño de mampostería. ¿Qué tipo de estrategias puedo usar como ingeniero para tomar mis propias decisiones? Una que conozco es esta llamada YACNI. Con el tiempo, esto crea deuda técnica. Si haces un poco de esfuerzo y haces esto reutilizable, puede ser muy útil en términos de API. Y luego la situación especial que quieres manejar simplemente manejándola afuera. En algún momento de mi carrera, estaba usando mucho YACNI y comencé a trabajar en Shopify en un proyecto de código abierto y comencé a preocuparme por las APIs que lanzaba porque se supone que deben permitir a las personas hacer las cosas que quieren hacer y si no sucede, entonces es realmente triste. Es lo mismo con los sistemas de diseño. Si haces una API que no es buena, hay un costo para ello. ¿Cómo puedo hacer buenas APIs? Veamos algunas de las grandes. TC39, ellos son el grupo que realmente está creando las nuevas APIs de JavaScript. Hice mi propio proceso que llamo diseño iterativo de componentes donde trato de averiguar qué es lo suficientemente bueno para un lanzamiento antes de publicarlo. El primer paso es prototipar. Y esto es, nuevamente, haciendo Yagni. Creo que puedes tener mejores APIs si sigues un proceso adecuado. El segundo paso, generalmente escribo un RFC. Cuando haces esto, te das cuenta de qué partes de tu API suenan realmente extrañas de explicar. Y el paso final aquí es compartir. Compartir es difícil porque a veces tenemos orgullo como desarrolladores y no queremos recibir comentarios y solo queremos lanzar inmediatamente. Pero el problema de no recibir comentarios es que cuando estás trabajando con un problema, ya no puedes ver objetivamente. Compartir es bueno. Todas las APIs, nunca hay un estado de nirvana para las APIs. Siempre hay la sensación de que algo no está bien, algo está roto aquí. Todo el tiempo que trabajé, sentí que nunca llegamos allí y probablemente nunca lo haremos. Así que todo lo que puedes hacer es probablemente disfrutar el proceso de crear APIs. Ese es mi consejo final. Gracias.

1. Introduction to Rocks and Math

Short description:

Hola a todos. Mi nombre es Daniel, y me gustan las rocas. Soy líder de sistemas de diseño en Personia y algo que me gusta que también es un poco nerd es las matemáticas. Me gustan las matemáticas. Hay muchas maneras de resolver un problema. Una forma de construirlo en una API es hacerlo con props. La siguiente posible manera podría ser componentes composables. ¿Cuál es mejor? La respuesta de un ingeniero senior sería, bueno, depende. Los props son realmente buenos con TypeScript. Por otro lado, la composición... Podrías tener otros tipos de componentes. Podrías crear otros tipos y ponerlos y aún funcionar.

♪♪ {{^}}♪♪ {{^}}♪♪ {{^}}♪♪ {{^}}♪♪ Hola a todos. Mi nombre es Daniel, y me gustan las rocas. De hecho... Es una foto mía en Islandia con alguien que coleccionó muchas rocas. No yo. Soy líder de sistemas de diseño en Personia y algo que me gusta que también es un poco nerd son las matemáticas. Me gustan las matemáticas. ¿Por qué me gusta esta cosa nerd? Es porque de alguna manera, es una ciencia muy exacta y me gusta que generalmente hay una solución óptima para todo lo que hacemos. Supongo que la ingeniería de software... Sí. Siempre hay muchas opiniones. Hay muchas maneras de resolver un problema.

Por ejemplo, digamos que queríamos construir un componente de menú desplegable como este. Una forma de construirlo en una API es hacerlo con props. Tengo los props tienen etiqueta. Esto es simple, y creo que la mayoría de los ingenieros usarán esto porque siento que a los ingenieros les gustan los props. Es muy directo. La siguiente posible manera podría ser componentes composables. Podrías tener este menú desplegable, tener estos subcomponentes y luego simplemente juntarlos. Lo que es realmente agradable es que puedes mezclarlos y combinarlos. Estoy viendo esto más a menudo en los sistemas de diseño. ¿Cuál es mejor? ¿Cuál crees que es mejor? La respuesta de un ingeniero senior sería, bueno, depende. ¿Verdad? Analicemos. Los props son realmente buenos con TypeScript. Cuando lo estoy escribiendo, es realmente agradable ver lo que está sucediendo. Necesito poner un valor aquí y luego, está bien, aparece. Puedes fácilmente, sobre la marcha, entenderlo. Por otro lado, la composición... Podrías tener otros tipos de componentes. Podrías crear otros tipos y ponerlos y aún funcionar.

2. Building Reusable Components with YACNI

Short description:

Digamos que quiero envolverlo en un tooltip. Puedes ver un poco las diferencias en el enfoque. Este es un diseño de mampostería. ¿Qué tipo de estrategias puedo usar como ingeniero para tomar mis propias decisiones? Una que conozco se llama YACNI. Con el tiempo, esto crea deuda técnica. Si haces un poco de esfuerzo y haces esto reutilizable, puede ser muy útil en términos de API.

Digamos que quiero envolverlo en un tooltip. Puedo hacerlo. Aún funcionará. Puedes ver que hay mucha mezcla y combinación sucediendo. Por otro lado, con los props, será un poco difícil. Terminas creando estos enormes objetos para poder obtener lo mismo. Puedes ver un poco las diferencias en el enfoque. Lo que quiero decir con esto, siempre hay pros y contras, incluso en las pequeñas cosas. También, en las cosas grandes, hay muchos pros y contras.

Si alguien sabe, este es un diseño de mampostería. Recientemente, hay una propuesta de API de CSS masonry. Esta es la discusión que está sucediendo entre Apple y Google sobre cuál es la mejor API para CSS masonry. Es solo un montón de casos límite para manejar. Incluso situaciones más grandes tienen problemas para decidir cuál es la mejor API para trabajar. Volvemos. El ingeniero de software tiene muchas respuestas. ¿Qué tipo de estrategias puedo usar como ingeniero para tomar mis propias decisiones? Una que conozco y probablemente todos ustedes conocen es esta llamada YACNI. Escuchas YACNI aquí, YACNI allá. Siempre que alguien te pregunta por qué está sucediendo esto, puedes simplemente decirles YACNI. Para aquellos que no lo saben, YACNI significa you ain't gonna need it. Simplemente construyes exactamente lo que necesitas y lo envías. Simplemente envías rápido, realmente, realmente rápido. Tu evaluación de desempeño resulta realmente excepcional. Como adivinaste, con el tiempo, esto crea deuda técnica.

Un ejemplo de usar YACNI en este componente simple que tiene un icono es ahora necesito una bandera, agrego un prop de bandera. Ahora necesito algún error y una advertencia y un color tal vez, y necesito agregar un tooltip y luego tener algún booleano para alguna situación especial para que este componente se comporte bien. Puedes ver que esto termina siendo un componente Frankenstein con el tiempo. Si haces un poco de esfuerzo y haces esto reutilizable, puede ser muy útil en términos de API. Por ejemplo, este componente podría tener un accesorio que pueda recibir banderas, iconos y otras cosas que no solo hace, y los colores podrían ser semánticos. Y podemos tener un componente tooltip reutilizable que pueda ser usado en otras áreas tambié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

Despídete de tus esquemas de API con tRPC
React Day Berlin 2022React Day Berlin 2022
29 min
Despídete de tus esquemas de API con tRPC
Today's Talk introduces TRPC, a library that eliminates the need for code generation and provides type safety and better collaboration between front-end and back-end. TRPC is demonstrated in a Next JS application integrated with Prisma, allowing for easy implementation and interaction with the database. The library allows for seamless usage in the client, with automatic procedure renaming and the ability to call methods without generating types. TRPC's client-server interaction is based on HTTP requests and allows for easy debugging and tracing. The library also provides runtime type check and validation using Zod.
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
16 min
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL has made a huge impact in the way we build client applications, websites, and mobile apps. Despite the dominance of resolvers, the GraphQL specification does not mandate their use. Introducing Graphast, a new project that compiles GraphQL operations into execution and output plans, providing advanced optimizations. In GraphFast, instead of resolvers, we have plan resolvers that deal with future data. Graphfast plan resolvers are short and efficient, supporting all features of modern GraphQL.
Manejo de Cambios Significativos en GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
22 min
Manejo de Cambios Significativos en GraphQL
Top Content
This Talk discusses handling breaking changes in a GraphQL schema, including the use of the deprecated directive to tag fields that should no longer be used. It also covers the process of deploying GraphQL APIs and mobile apps, highlighting the challenges of mobile app release adoption. The Talk emphasizes the importance of making safe upgrades in mobile apps and provides strategies for detecting and handling breaking changes, such as using TypeScript and GraphQL Inspector. Overall, the Talk emphasizes the need to minimize user impact when introducing breaking changes in GraphQL schemas.
Patrones avanzados para la gestión de API en aplicaciones React a gran escala
React Advanced 2021React Advanced 2021
20 min
Patrones avanzados para la gestión de API en aplicaciones React a gran escala
Top Content
This Talk covers advanced patterns for API management in large-scale React applications. It introduces the concept of an API layer to manage API requests in a more organized and maintainable way. The benefits of using an API layer include improved maintainability, scalability, flexibility, and code reusability. The Talk also explores how to handle API states and statuses in React, and provides examples of canceling requests with Axios and React Query. Additionally, it explains how to use the API layer with React Query for simplified API management.
Manejo Seguro de Datos Dinámicos con TypeScript
Node Congress 2021Node Congress 2021
29 min
Manejo Seguro de Datos Dinámicos con TypeScript
Top Content
This Talk discusses the safe handling of dynamic data with TypeScript using JSON Schema and TypeBox. Fastify, a web framework, allows developers to validate incoming data using JSON schema, providing type safety and error handling. TypeBox is a powerful library that allows developers to define JSON schemas and derive static types in TypeScript. The combination of JSON schema, TypeBox, and Fastify provides powerful tools for type safety and validation of dynamic data.
Las APIs están evolucionando. Otra vez.
JSNation 2023JSNation 2023
28 min
Las APIs están evolucionando. Otra vez.
Matteo Collina
Luca Maraschi
2 authors
Technology is a spiral, with foundational ideas resurfacing. Java revolutionized enterprise applications. REST and JSON simplified building APIs and websites. Node.js enabled fast and custom development, leading to the microservices revolution. Platformatic aims to fill the gap in building, managing, and scaling microservices painlessly.

Workshops on related topic

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
Construyendo APIs GraphQL sobre Ethereum con The Graph
GraphQL Galaxy 2021GraphQL Galaxy 2021
48 min
Construyendo APIs GraphQL sobre Ethereum con The Graph
WorkshopFree
Nader Dabit
Nader Dabit
The Graph es un protocolo de indexación para consultar redes como Ethereum, IPFS y otras blockchains. Cualquiera puede construir y publicar APIs abiertas, llamadas subgrafos, para hacer que los datos sean fácilmente accesibles.

En este masterclass aprenderás cómo construir un subgrafo que indexa datos de blockchain de NFT del contrato inteligente Foundation. Desplegaremos la API y aprenderemos cómo realizar consultas para recuperar datos utilizando diferentes tipos de patrones de acceso a datos, implementando filtros y ordenamiento.

Al final del masterclass, deberías entender cómo construir y desplegar APIs de alto rendimiento en The Graph para indexar datos de cualquier contrato inteligente desplegado en Ethereum.
Flujos de base de datos y desarrollo de API con Prisma
Node Congress 2022Node Congress 2022
98 min
Flujos de base de datos y desarrollo de API con Prisma
WorkshopFree
Nikolas Burk
Nikolas Burk
Prisma es un ORM de código abierto para Node.js y TypeScript. En esta masterclass, aprenderás los flujos de trabajo fundamentales de Prisma para modelar datos, realizar migraciones de base de datos y consultar la base de datos para leer y escribir datos. También aprenderás cómo Prisma se integra en tu stack de aplicaciones, construyendo una API REST y una API GraphQL desde cero utilizando SQLite como base de datos.
Tabla de contenidos:
- Configuración de Prisma, modelado de datos y migraciones- Explorando Prisma Client para consultar la base de datos- Construyendo rutas de API REST con Express- Construyendo una API GraphQL con Apollo Server
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
React Advanced 2022React Advanced 2022
206 min
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
Workshop
Thomas Findlay
Thomas Findlay
Con el surgimiento de frameworks, como React, Vue o Angular, la forma en que se construyen los sitios web ha cambiado a lo largo de los años. Las aplicaciones modernas pueden ser muy dinámicas y realizar múltiples solicitudes de API para poblar un sitio web con contenido actualizado o enviar nuevos datos a un servidor. Sin embargo, este cambio de paradigma ha introducido nuevos problemas con los que los desarrolladores deben lidiar. Cuando una solicitud de API está pendiente, tiene éxito o falla, el usuario debe recibir una retroalimentación significativa. Otros problemas pueden incluir el almacenamiento en caché de datos de API o la sincronización del estado del cliente con el servidor. Todos estos problemas requieren soluciones que deben ser codificadas, pero pueden volverse rápidamente inmanejables y dar como resultado una base de código difícil de ampliar y mantener. En este masterclass, cubriremos cómo manejar las solicitudes de API, los estados de API y la cancelación de solicitudes mediante la implementación de una Capa de API y combinándola con React-Query.
Prerrequisitos: Para aprovechar al máximo este masterclass, debes estar familiarizado con React y Hooks, como useState, useEffect, etc. Si deseas codificar junto con nosotros, asegúrate de tener Git, un editor de código, Node y npm instalados en tu máquina.