En esta charla aprenderemos qué son los Slots y qué significan para el ecosistema de React, cuál es el estado actual y el futuro.
This talk has been presented at React Advanced 2022, check out the latest edition of this React Conference.
En esta charla aprenderemos qué son los Slots y qué significan para el ecosistema de React, cuál es el estado actual y el futuro.
This talk has been presented at React Advanced 2022, check out the latest edition of this React Conference.
Gongwu Nie, también conocido como Neo, es un experto en sistemas de diseño que compartió sus ideas sobre una nueva forma de composición llamada React Snots, enfocándose en cómo construir componentes flexibles y a prueba de futuro.
React Snots busca resolver el problema de la inflación de la API y la confusión que genera para los consumidores al intentar mantener la flexibilidad y extensibilidad de los componentes sin convertirlos en una caja negra.
Los 'slots' son fundamentales porque permiten definir marcadores de posición en plantillas que pueden ser llenados con cualquier fragmento de marcado, lo que ayuda a mantener la consistencia del diseño definido en la plantilla en lugar de por el orden de composición.
React Snots utiliza una técnica donde se pueden definir y personalizar 'slots' para diferentes partes de un componente, como etiquetas y entradas, permitiendo una mejor gestión de la accesibilidad y flexibilidad en la composición.
Nie identifica que React no soporta bien los web components ni los slots, lo que limita la escalabilidad de esta técnica. Propone una nueva API en React Snots RFC, que incluye 'createHost' y 'createSlot' para manejar mejor estos desafíos.
La 'forma de configuración' se centra en mantener la consistencia y es menos flexible, mientras que la 'forma de composición' ofrece mayor flexibilidad y personalización de sub-componentes, pero puede conducir a problemas de consistencia y uso de patrones incorrectos.
Se menciona que a medida que los equipos de producto solicitan más opciones para acceder a los elementos internos de un componente, como adjuntar eventos o añadir atributos de data, esto puede complicar aún más la API y hacerla menos predecible.
Nie sugiere el uso de un modelo de 'slots' en los componentes, similar a los web components, pero implementado de manera que permita una interacción más avanzada entre los slots y los componentes host, utilizando APIs como 'createHost' y 'createSlot'.
Hoy, mi tema es React Snots, una nueva forma de composición. Cada vez que encontraba un nuevo sistema de diseño, lo primero que hacía era ver cómo implementaban el componente de entrada de texto. La solución es simple. Podemos pasar el nombre de la clase y el estilo al contenedor del componente en su lugar. Similar a WrapRef, podemos introducir indicaciones de contenedor, indicaciones de etiqueta e indicaciones de descripción. Aquí está la API de entrada de texto de man time.
Hey, es un gran honor estar aquí para compartir con ustedes algunos de mis pensamientos sobre el sistema de diseño. Mi nombre es Gongwu Nie, pueden llamarme Neo. Hoy, mi tema es React Snots, una nueva forma de composición.
Antes de sumergirnos en el tema, me gustaría contar la historia primero. Cuando trabajo en el sistema de diseño, siempre estoy pensando, ¿cómo construir componentes flexibles y a prueba de futuro? Para mí, lo más difícil no es crear nuevos componentes o solucionar errores extraños. Es el diseño de la API del componente diseño.
Cada vez que encontraba un nuevo sistema de diseño, lo primero que hacía era ver cómo implementaban el componente de entrada de texto, porque es uno de los componentes más misteriosos. Permítanme mostrarles. La entrada de texto es simple y directa. Viene con una etiqueta, una entrada y tiene una prueba. Primero añadamos soporte para accessibility. Al construir un componente compartible, por favor no olviden reenviar ref. Necesitamos la ref al input para enfocarlo en form validation. ¿Pero qué pasa con el contenedor? También necesitamos la ref al contenedor para adjuntarle propover o tooltip en algunos casos. Bueno, podemos añadir un contenedor para ello.
Pero espera, ¿has notado un problema potencial con el enfoque actual? ¿Qué sucederá si intentamos añadir algunos márgenes al componente desde el otro componente? Aumentará el margen entre la etiqueta, la entrada y la descripción en su lugar, porque extendemos todos los demás indicadores al elemento de entrada interno. La solución es simple. Podemos pasar el nombre de la clase y el estilo al contenedor del componente en su lugar. ¿Se ve bien? El problema es que el componente se está volviendo confuso para los consumidores. ¿Qué indicación se pasará al contenedor? ¿Qué indicación se pasará a la entrada? El componente se convierte en una caja negra. En realidad, el equipo de producto seguirá pidiendo más opciones para acceder a los elementos internos, como adjuntar eventos de punto o añadir atributos de data a la etiqueta o descripción. Similar a WrapRef, podemos introducir indicaciones de contenedor, indicaciones de etiqueta e indicaciones de descripción. Funciona. Pero no termina aquí. ¿Qué pasa si necesitamos añadir alrededores a la entrada, más indicaciones. Ahora puedes ver cómo la API se hincha con este enfoque. Aquí está la API de entrada de texto de man time. No me malinterpreten. Man time es una gran biblioteca de componentes. Me encanta mucho.
Eligen la forma de configuración para diseñar la API del componente. En la forma de configuración, tenemos que soportar la flexibilidad con la inflación de la API, y los componentes se convierten en una caja negra completa para los consumidores. Retrocedamos un paso y pensemos, ¿cómo construimos nuestra aplicación web en React? Componemos componentes. Cada componente simplemente hace su propio trabajo y eso es todo. Simple y flexible.
Eligen la forma de configuración para diseñar la API del componente. En la forma de configuración, tenemos que soportar la flexibilidad con la inflación de la API, y los componentes se convierten en una caja negra completa para los consumidores.
Retrocedamos un paso y pensemos, ¿cómo construimos nuestra aplicación web en React? Componemos componentes. Cada componente simplemente hace su propio trabajo y eso es todo. Simple y flexible.
Entonces, ¿qué pasaría si usamos el mismo enfoque para los componentes compartibles? Ganamos la misma claridad, simplicidad y flexibilidad. Muchas bibliotecas de componentes populares están utilizando la CompositionWay para implementar componentes accesibles como Chakra UI, Redux primitives, Hedonist UI, y más.
Para soportar la accesibilidad, tenemos que usar el Contexto de React para comunicarnos entre el padre y los hijos para coordinar los atributos de accesibilidad. La configuración es simple de usar. Realmente quieres escribir tu módulo en el estilo de la izquierda en lugar del estilo de la derecha. Pero la CompositionWay no es la respuesta final.
We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career
Comments