Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia

Rate this content
Bookmark

Los sistemas de diseño buscan aportar consistencia al diseño de una marca y hacer que el desarrollo de la interfaz de usuario sea productivo. Las bibliotecas de componentes con una API bien pensada pueden facilitar esto. Pero, ¡a veces una elección de API puede accidentalmente sobrepasar y ralentizar al equipo! Hay un equilibrio allí... en algún lugar. Exploremos algunos de los problemas y posibles soluciones creativas.

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

FAQ

La API de Shopify es muy controlada y no permite personalizaciones como cambiar estilos o nombres de clase, mientras que la API de Material UI es extremadamente flexible, permitiendo personalizar casi cualquier aspecto, como colores, bordes e íconos.

Una biblioteca más controlada como Polaris de Shopify genera resultados predecibles y consistentes, ideal para productos específicos que buscan mantener una uniformidad. Por otro lado, una biblioteca flexible como Material UI es adecuada para productos que requieren adaptación y personalización intensiva.

Es importante considerar si la biblioteca está construida para una marca específica o para uso de código abierto, la cultura de diseño dentro de la empresa, y la madurez de los productos en los que se trabajará, evaluando si los patrones ya están establecidos o si aún se está en una fase experimental.

Sid explora diferentes configuraciones de API, discutiendo la posibilidad de usar objetos y tipos específicos para manejar variaciones como divisores y acciones destructivas, buscando un equilibrio entre ocultar detalles de implementación y proporcionar suficiente flexibilidad para diferentes casos de uso.

Una API componible permite una mayor flexibilidad y adaptabilidad, facilitando la integración y personalización de componentes según las necesidades específicas de cada producto, sin romper la consistencia y manteniendo la coherencia en el diseño y comportamiento general.

Siddharth Kshetrapal
Siddharth Kshetrapal
47 min
22 Oct, 2021

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La Charla discute el equilibrio entre flexibilidad y consistencia en los sistemas de diseño. Explora el diseño de la API del componente ActionList y las opciones de personalización que ofrece. Se enfatiza el uso de APIs basadas en componentes y la componibilidad para la flexibilidad y personalización. La Charla también toca el componente ActionMenu y el concepto de construir para las personas. La sesión de preguntas y respuestas cubre temas como la inclusión de componentes en sistemas de diseño, la complejidad de la API, y la decisión entre crear un sistema de diseño personalizado o usar una biblioteca de componentes.

1. Flexibilidad vs Consistencia en Sistemas de Diseño

Short description:

Hola, soy Sid. Trabajo en el equipo de sistema de diseño en GitHub. Quiero hablar sobre caminar la delgada línea entre la flexibilidad y la consistencia. Tengo esta alerta que he estado mirando en otros sistemas de diseño para inspiración, para ideas de API, todo eso. Y estaba mirando esta alerta e intentando construirla con Polaris de Shopify y la Biblioteca de Componentes de Material UI. Así es como difieren. Con Shopify, es una API de configuración estrictamente controlada, mientras que Material UI ofrece más flexibilidad. El espectro de flexibilidad depende de varios factores como el público objetivo, la cultura de diseño y la madurez del producto. Es importante encontrar el equilibrio correcto para tu biblioteca de componentes. ¡Gracias por venir a mi charla!

Hola, soy Sid. Trabajo en el equipo de sistema de diseño en GitHub. Quiero hablar sobre caminar la delgada línea entre la flexibilidad y la consistencia. Así que comencemos directamente con code.

Tengo esta alerta que he estado mirando en otros sistemas de diseño para inspiración, para ideas de API, todo eso. Y estaba mirando esta alerta e intentando construirla con Polaris de Shopify y la Biblioteca de Componentes de Material UI. Así es como difieren.

Así que con Shopify lo llaman banner. Así que renderizas un banner y luego toma un estado, en este caso el estado es crítico, y toma un título. Así que toma estas propiedades como configuración, ¿verdad? Así que el título no va en el hijo, va en el componente como una propiedad. Y luego tienes la acción y solo dices cuál es la acción y cuáles son los contenidos que van dentro de la acción. Realmente no llegas a elegir la acción por sí misma. Y el componente se encarga de dónde se renderiza, cómo se renderiza, qué color, el borde, todo eso. Así que este es un ejemplo de una API de configuración, que está muy controlada.

Y de hecho, si lo intentas, jugué con esto. Cuando intenté dar una etiqueta de estilo, intenté darle diferentes nombres de clase. No acepta ninguno. Esto es lo que obtienes. Y luego cuando intenté construir lo mismo con Material UI, tenían una gravedad también. Lo llaman error no crítico, que es todo lo mismo. Pero podrías darle cualquier icono que quieras. Así que pude importar un icono del icono Material y pasarlo. También podría darle diferentes estilos. Así que pude personalizar el borde. Y para los contenidos dentro, tuve que tomar el título de la alerta que exportan y tomar un botón e intentar hacer que el botón se vea exactamente como yo quiero. Más el espacio entre ellos, tuve que hacerlo con el margen entre los componentes. Así que eso es solo un pequeño ejemplo de cómo la flexibilidad puede ser tan diferente entre dos componentes. Como si comparas la API de estos, la de Shopify está súper controlada versus la de Material UI puedes personalizar básicamente cualquier cosa que quieras. Eso nos lleva a esta línea o este espectro de flexibilidad donde Polaris probablemente esté en algún lugar aquí. Así que es muy opinado. Está construido para Shopify. No está construido para todos. Tiene una API muy estricta y eso lleva a resultados predecibles y consistentes. Cuando usas ese banner, sabes exactamente lo que va a salir. Pero entonces podría volverse rígido y restrictivo para la experimentación o diferentes casos de uso. Lo siento. Por otro lado, el de Material UI probablemente esté en algún lugar en el borde derecho. Tal vez incluso todo el camino allí. Y eso es porque es de código abierto. Tiene una API extremadamente flexible porque no tiene contexto de dónde se usará. Así que necesita ser flexible para que puedas encajarlo en el producto que estás construyendo. Y luego, por supuesto, con tanta personalización, puede volverse desordenado y fragmentado porque, bueno, la biblioteca de componentes no tiene muchas decisiones de diseño incorporadas. Todas esas están en el lado del producto. Así que tomando esto, es como, ¿qué es lo correcto para ti? ¿Dónde debería caer tu biblioteca de componentes en el espectro de flexibilidad? Y la respuesta es que depende, ¿no es así? Siempre. Pero esto es de lo que depende. Depende de si tu biblioteca de componentes está construida para una marca o está construida para código abierto? Que es como todos. ¿Cuál es la cultura de diseño en la marca para la que trabajas? ¿Está consolidada con un pequeño grupo de diseñadores o es un montón de equipos independientes que operan prácticamente por su cuenta? ¿E incluso cuál es la madurez de los productos en los que estás trabajando? ¿Tienes patrones establecidos o todavía es temprano y es más experimental, todavía jugando para encontrar esos patrones?

Así que la respuesta entonces básicamente es que depende, ¿verdad? Gracias por venir a mi charla. Adiós. Pero no, intenté usar estos e intenté aplicarlos a este componente.

2. Componente ActionList y Diseño de API

Short description:

Este es un componente ActionList con varias variaciones utilizadas en GitHub. El recorrido del diseño de la API explora el equilibrio entre el control y la flexibilidad. El menú se puede crear pasando elementos a la lista de acciones y definiendo el comportamiento al seleccionar. Para diferentes acciones, se considera una API de divisor, con la opción de usar un texto específico o un tipo. ActionList.divider proporciona un buen equilibrio al ocultar el detalle de implementación.

Este es un componente ActionList dentro de una superposición. Y lo verás repartido por GitHub. Hay muchas variaciones de esto, pero este es un componente bastante involucrado. Así que tiene un montón de variaciones. Y estas son algunas de ellas. Así que lo ves en una página de repositorio. Justo al lado, ves esto como opciones en un menú desplegable. Ves estos como en el panel de lanzamientos. Este es el de los lanzamientos. También los ves al intentar seleccionar asignados o revisores. Así que hay un montón de... Hay mucho rango en este componente.

Y estaba tratando de averiguar cómo debería ser la API, ¿cuánto control o flexibilidad debería tener? Y déjame llevarte a través de ese viaje, para que pueda cuantificar lo que significa depende. Así que hagamos este ejercicio de API desde el principio. Estoy construyendo esta lista de acciones. Esta es la página de problemas. Y rápida advertencia para ti, ninguno de estos diseños es realmente producción design. Todos son de una exploración. Así que si no coincide exactamente con la estética de lo que ves en GitHub.com, eso es realmente intencional. Todo esto es una exploración.

Bueno, dicho esto, este es el menú que ves, y tiene algunos estilos. Creo que tiene algunas interacciones de teclado. Sí, ahí lo tienes. Así que para hacer este menú, veamos, el menú más sencillo aquí podría ser, tienes una lista de acciones y simplemente le pasas elementos, y los elementos son estas opciones que vas a hacer. Y luego al seleccionar, haces algo con ello. Así que puedes llamar a tu propia acción dependiendo de la cadena. Se siente un poco raro hacer estas acciones basándose sólo en el contenido de la cadena. Como si dices respuesta de cita, esto es lo que obtienes a cambio. Así que se siente raro actuar sólo en una cadena. Así que tal vez algo como esto es mejor donde es una configuración, es un objeto, y luego puedes pasar en tu on select. Así que dependiendo de la copia de eso, también puedes pasar lo que debería ser la selección. Y eso se siente decente.

Así que pasamos al siguiente caso de uso donde no todas estas tienen las mismas acciones. Así que algunas de estas se basan en la acción de, ya sabes, como, llevarlo fuera. Algunas de estas son sobre el contenido en sí. Así que editar y eliminar. Y esta es la tercera, que es, ya sabes, es un informe. Es una cosa de moderación. Así que queremos separarlos con divisores y ahora ¿cómo debería ser la API del divisor? Así que pensé en ello y estaba pensando que ya tienes texto, ¿debería ser como un texto secreto muy específico que das. Como si me das un divisor de subrayado, entonces sé cómo poner un divisor o tal vez no debería hacer eso en absoluto. Tal vez debería ser un tipo, ¿verdad? Y todos los demás son de tipo fila y este es de tipo divisor. Pero entonces, por supuesto, ya sabes, ¿es un divisor en minúsculas, un divisor en mayúsculas, todo eso? Así que tal vez deberías importarlo de la ActionList y entonces es sólo un valor en los objetos con ActionList.divider type. Y si ya estás haciendo esto, entonces tal vez esto es ActionList.divider, donde, ya sabes, ActionList.divider es un objeto que es un detalle interno que sabe cómo renderizar el divisor. Esto se siente como un buen equilibrio donde estamos ocultando el detalle de implementación del divisor. Nadie necesita saber que hay un tipo divisor. Todo lo que haces es poner un ActionList.divider allí. Se siente bien. OK, sigamos. Siguiente caso de uso, algunos de estos son destructivos.

QnA

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

No resuelvas problemas, elimínalos
React Advanced Conference 2021React Advanced Conference 2021
39 min
No resuelvas problemas, elimínalos
Top Content
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
Uso efectivo de useEffect
React Advanced Conference 2022React Advanced Conference 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
React Day Berlin 2023React Day Berlin 2023
16 min
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
Top Content
This Talk focuses on effective React state management and lessons learned over the past 10 years. Key points include separating related state, utilizing UseReducer for protecting state and updating multiple pieces of state simultaneously, avoiding unnecessary state syncing with useEffect, using abstractions like React Query or SWR for fetching data, simplifying state management with custom hooks, and leveraging refs and third-party libraries for managing state. Additional resources and services are also provided for further learning and support.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced Conference 2022React Advanced Conference 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
React and TypeScript have a strong relationship, with TypeScript offering benefits like better type checking and contract enforcement. Failing early and failing hard is important in software development to catch errors and debug effectively. TypeScript provides early detection of errors and ensures data accuracy in components and hooks. It offers superior type safety but can become complex as the codebase grows. Using union types in props can resolve errors and address dependencies. Dynamic communication and type contracts can be achieved through generics. Understanding React's built-in types and hooks like useState and useRef is crucial for leveraging their functionality.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
Master Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Master Patrones de JavaScript
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante este masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debe conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final del masterclass, los participantes ganarán confianza en su capacidad para escribir código JavaScript de alta calidad que perdure en el tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento profesional y las oportunidades de avance en la industria del software
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión