Cómo lograr la composición de diseño en React

Rate this content
Bookmark

Usar CSS en esta era de componentes es difícil. Se han creado muchas herramientas para ayudarnos con este problema, pero todas fallan en el único problema que las herramientas nunca pueden resolver: ¿Qué componente debería encargarse de qué estilos? En esta charla, repasaremos estrategias sobre cómo construir diseños de manera componible.

8 min
21 Jun, 2022

Video Summary and Transcription

Esta charla discute cómo lograr la composición de diseño en React utilizando los Primitivos de Diseño de Bedrock. Al componentizar el diseño CSS, se pueden lograr y reutilizar diseños complejos en diferentes componentes. La charla también aborda los desafíos de lograr diseños complejos, como alineaciones de tarjetas, y proporciona soluciones para mantener la alineación y la capacidad de respuesta. La biblioteca de primitivos de diseño de Bedrock simplifica los diseños web y ofrece flexibilidad en la composición de diseños.

Available in English

1. Logrando la Composición de Diseño en React

Short description:

¡Hola, React Summit! En esta charla, discutiré cómo lograr la composición de diseño en React utilizando los Primitivos de Diseño de Bedrock. Al componentizar el diseño CSS, podemos crear primitivas de diseño como stack, inline, split, cover y frame. Estos componentes se pueden combinar para lograr diseños complejos y se pueden reutilizar en diferentes componentes. La biblioteca de primitivas de diseño de Bedrock simplifica los diseños web y ofrece flexibilidad en la composición de diseños. Visita bedrocklayout.dev para obtener más información.

¡Hola, React Summit, y bienvenidos a mi charla sobre cómo lograr la composición de diseño en React. Mi nombre es Travis Waithmer, y pueden encontrarme en Twitter, en Travis Waithmer, todo en mi cuenta en Canvas, o en mi blog en non-traditional.dev.

Ahora, un poco sobre mí, trabajo para Plex, que es una plataforma de transmisión en línea que te permite transmitir tanto tus video de tus medios personales como video a pedido que curamos para ti. Y estamos contratando, por supuesto, Plex.tv slash careers. También soy el creador y mantenedor de Bedrock Layout Primitives. Es una biblioteca de diseño diseñada para facilitar el diseño de tus aplicaciones de React en la web. Y ese es el punto de esta charla, ¿cómo logramos la composición de diseño? ¿Cómo usamos el modelo de composición de React en nuestro diseño web?

Bueno, veamos este diseño de héroe. Esto es probablemente algo que todos hemos hecho en algún momento de nuestra carrera. Ahora, una forma ingenua de abordar esto es abordarlo a nivel de componente. Tenemos un contenedor de héroe, tenemos un héroe superior, izquierdo, derecho, y así sucesivamente. Y así es como nos enseñan a escribir nuestro CSS, de arriba hacia abajo, con un enfoque basado en excepciones. Ahora, desafortunadamente, esto se vuelve muy difícil de escalar en nuestras aplicaciones, por lo que comenzamos a reutilizar nuestros componentes. Ahora, podemos tener metodologías de CSS que nos ayuden, pero solo nos llevan hasta cierto punto. Nos ayudan a administrar nuestras hojas de estilo a gran escala, pero cuando abordamos cada componente y, específicamente, el diseño de cada componente, como algo único, estamos perdiendo una oportunidad fantástica para reutilizar el diseño. Entonces, ¿qué tal si te dijera que el diseño de CSS se puede componentizar? ¿Qué tal si creamos algunas primitivas de diseño? Por ejemplo, ¿qué tal si tuviéramos un componente stack que apilara cosas una encima de la otra? Un inline que colocara las cosas en línea con espacios entre ellas? Un componente split que dividiera las cosas solo desde el lado izquierdo y derecho, de manera uniforme a lo largo del ancho del padre? ¿Qué tal si tuviéramos un componente cover que cubriera un área y centrara verticalmente los hijos en su interior? Y un componente frame que tomara cosas como medios, imágenes o cualquiera de sus hijos y lo forzara a tener una relación de aspecto? Ahora, individualmente, cada uno solo puede hacer una cosa única. Pero cuando los combinamos, podemos lograr ese mismo diseño de héroe. Podemos tener un inline, un par de stacks, un cover, frame, split. A través de una composición cuidadosa, ahora hemos logrado ese diseño de héroe. Pero eso no es todo. Podemos colocarlo en JSX de esta manera y simplemente usar la composición de React. Y luego podemos usar eso en nuestros otros componentes, como un formulario de registro, un feed de publicaciones de blog, una página de características. Todos estos pueden usar exactamente los mismos componentes, exactamente los mismos diseños, pero simplemente compuestos de diferentes maneras para lograr sus diseños individuales. Y eso es exactamente para lo que está diseñada la biblioteca de primitivas de diseño de Bedrock. Es el guión bajo de los diseños web. Luego podemos tomar... Y si quieres obtener más información, está en bedrocklayout.dev. Pero tomemos, por ejemplo, un simple componente stack. Probablemente todos tengamos algo como esto, donde necesitamos colocar un espacio consistente encima de otros elementos. Bueno, utilizando solo uno de los componentes de diseño de Bedrock, el stack, por ejemplo, podemos lograr este componente de suscripción. Ahora, otro patrón común es que necesitamos hacer cosas de manera similar a como funciona nuestro párrafo en la web.

2. Logrando Diseños Complejos en React

Short description:

Cuando nos quedamos sin espacio, nuestras palabras se envolverán automáticamente a la siguiente fila según la justificación que establezcamos. El componente de agrupación en línea es útil para contenido en línea que se envuelve automáticamente. Para diseños más complejos como una alineación de tarjetas, debemos asegurarnos de que cada tarjeta ocupe la altura completa de la fila, manteniendo las imágenes y los encabezados alineados. La descripción siempre debe estar centrada verticalmente. Las imágenes deben mantener una relación de aspecto y recortarse si es necesario. Las tarjetas deben estar en una cuadrícula receptiva con un ancho de columna mínimo, envolviendo y ajustando las columnas según sea necesario.

Cuando nos quedamos sin espacio, nuestras palabras se envolverán automáticamente a la siguiente fila según la justificación que establezcamos. Ahí es donde entra en juego el componente de agrupación en línea. Podemos tener cosas en línea. Pero a medida que nos quedamos sin espacio, se envolverá automáticamente según la justificación.

Y esto es cómo se ve en el código. Tenemos nuestro componente de menú que obviamente compone ese lado derecho dentro de él. Y simplemente usamos un grupo en línea para colocar todos nuestros elementos de navegación en una fila, y luego se agruparán una vez que el ancho no permita que todos se mantengan en una sola fila.

¿Y qué tal algo mucho más complicado como una alineación de tarjetas? Esto parece bastante simple al principio, pero hay algunas cosas a tener en cuenta. Cada una de estas tarjetas debe ocupar la altura completa de la fila en la que se encuentra, pero el imagen y los encabezados de todas las tarjetas deben alinearse. Pero la descripción, sin importar su tamaño, debe estar centrada verticalmente dentro de cada una de estas tarjetas.

Además de eso, todas las imágenes deben mantener una relación de aspecto, y las imágenes deben ser recortadas para mantener esa relación de aspecto. Y finalmente, cada una de estas tarjetas debe estar en una cuadrícula receptiva, deben mantener un ancho de columna mínimo, y si no pueden mantener ese ancho de columna y mantenerlos todos en la misma fila, debemos comenzar a envolver y ajustar las columnas en consecuencia.

Entonces, en el código, podríamos escribir nuestro componente de tarjeta usando un cover, que nos permite especificar la parte superior y la inferior. En este caso, la parte superior es un h3 y la parte inferior utiliza un componente frame para forzar una relación de aspecto de 16 por 9, y luego tenemos nuestra descripción que estará centrada verticalmente dentro de ese cover. Y luego establecemos esa altura en 100% para que siempre sea la altura completa de la fila en la que se encuentra. Y luego usaremos todas estas tarjetas dentro de una cuadrícula y podemos establecer el ancho mínimo del elemento a 40 ch para que las columnas sean lo más anchas posible para incluir todo en su interior. Pero si no pueden caber todos y sin tener al menos una columna de 40 ch, entonces comenzará a envolver y optimizar eso. Eso es todo el tiempo que tengo para ustedes hoy. Pueden obtener más información en bedrock-layout.dev o pueden ir a mi curso en newline.co donde les enseño más sobre la composición de diseños en React. Gracias por su excelente tiempo y espero que tengan un excelente resto de su conferencia.

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

React Summit 2022React Summit 2022
17 min
Composition vs Configuration: How to Build Flexible, Resilient and Future-proof Components
Top Content
There are many ways of authoring components in React, and doing it right might not be that easy, especially when components get more complex. In this talk, you will learn how to build future-proof React components. We will cover two different approaches to building components - Composition and Configuration, to build the same component using both approaches and explore their advantages and disadvantages.
React Summit 2022React Summit 2022
20 min
Find Out If Your Design System Is Better Than Nothing
Building a design system is not enough. Your dev team has to prefer it over one-off components and third-party libraries. Otherwise, the whole effort is a waste of time. Learn how to use static code analysis to measure if your design system wins over the internal competition and data-driven ways to improve your position.
TestJS Summit 2022TestJS Summit 2022
25 min
CCTDD: Cypress Component Test Driven Design
The first part of the talk will focus on a variety of patterns when using Cypress Component Testing and TDD to create React components. The code samples will be from Angular's Tour of Heroes to make the content relatable to a wider community. Currently I am working on a GitBook rewriting it in React using Cypress Component Tests, there should be plenty of content to distill into the talk.The second part of the talk will focus on test strategies, types of testing and where to apply them, and finally compare & contrast them to the familiar industry approaches.We will finish with key takeaways, sample application repos to help with learning, and rollout strategies.

Workshops on related topic

React Summit 2022React Summit 2022
147 min
Hands-on with AG Grid's React Data Grid
WorkshopFree
Get started with AG Grid React Data Grid with a hands-on tutorial from the core team that will take you through the steps of creating your first grid, including how to configure the grid with simple properties and custom components. AG Grid community edition is completely free to use in commercial applications, so you'll learn a powerful tool that you can immediately add to your projects. You'll also discover how to load data into the grid and different ways to add custom rendering to the grid. By the end of the workshop, you will have created an AG Grid React Data Grid and customized with functional React components.- Getting started and installing AG Grid- Configuring sorting, filtering, pagination- Loading data into the grid- The grid API- Using hooks and functional components with AG Grid- Capabilities of the free community edition of AG Grid- Customizing the grid with React Components
TypeScript Congress 2023TypeScript Congress 2023
131 min
Practice TypeScript Techniques Building React Server Components App
Workshop
In this hands-on workshop, Maurice will personally guide you through a series of exercises designed to empower you with a deep understanding of React Server Components and the power of TypeScript. Discover how to optimize your applications, improve performance, and unlock new possibilities.
 
During the workshop, you will:
- Maximize code maintainability and scalability with advanced TypeScript practices
- Unleash the performance benefits of React Server Components, surpassing traditional approaches
- Turbocharge your TypeScript with the power of Mapped Types
- Make your TypeScript types more secure with Opaque Types
- Explore the power of Template Literal Types when using Mapped Types
 
Maurice will virtually be by your side, offering comprehensive guidance and answering your questions as you navigate each exercise. By the end of the workshop, you'll have mastered React Server Components, armed with a newfound arsenal of TypeScript knowledge to supercharge your React applications.
 
Don't miss this opportunity to elevate your React expertise to new heights. Join our workshop and unlock the potential of React Server Components with TypeScript. Your apps will thank you.
React Summit 2023React Summit 2023
31 min
From Idea to Production: React Development with a Visual Twist
WorkshopFree
Join us for a 3-hour workshop that dives into the world of creative React development using Codux. Participants will explore how a visually-driven approach can unlock creativity, streamline workflows, and enhance their development velocity. Dive into the features that make Codux a game-changer for React developers. The session will include hands-on exercises that demonstrate the power of real-time rendering, visual code manipulation, and component isolation all in your source code.
Table of the contents: - Download & Setup: Getting Codux Ready for the Workshop- Project Picker: Cloning and Installing a Demo Project- Introduction to Codux Core Concepts and Its UI- Exercise 1: Finding our Feet- Break- Exercise 2: Making Changes While Staying Effective- Exercise 3: Reusability and Edge Case Validation- Summary, Wrap-Up, and Q&A
React Summit 2022React Summit 2022
98 min
Crash Course into TypeScript for content from headless CMS
WorkshopFree
In this workshop, I’ll first show you how to create a new project in a headless CMS, fill it with data, and use the content in your project. Then, we’ll spend the rest of time in code, we will:- Generate strongly typed models and structure for the fetched content.- Use the content in components- Resolve content from rich text fields into React components- Touch on deployment pipelines and possibilities for discovering content-related issues before hitting production
You will learn:- How to work with content from headless CMS- How content model can be leveraged to generate TS types and what benefits it brings to your project- How not to use string literals for content in code anymore- How to do rich text resolution into React components- How to minimize or avoid content-related issues before hitting production