Entonces, lo único bueno de esto es que es muy fácil de escribir. Si escribes TypeScript, entonces es un objeto, es muy basado en configuración, puedes escribir todo el objeto. Pero lo que terminó sucediendo fue que la gente quería poner un icono aquí, poner un contador aquí en el lado derecho. Al final, esto es cómo comenzó a verse la API, donde había una prop render item. Es una render prop, es una inversión de control, te pasamos las props del elemento y te decimos, por favor, pásalas a lo que vas a renderizar aquí. Debido a que hay preocupaciones de accesibilidad aquí, hay mucha magia que sucede para el enfoque y la navegación por teclado, queremos que todo eso funcione, y te pedimos que lo devuelvas. Realmente tengo miedo de algo como render item, porque perdemos todo el control o todas las características en las que confiamos y confiamos en el usuario para asegurarse de que todo ese código azul para el diseño receptivo, la accesibilidad, lo hayan configurado correctamente y lo pasen hacia abajo, ¿verdad? Odio esto. Y especialmente este último patrón de render item, el problema con eso no es que la gente cometa errores, aunque sucede, no es como si la gente intentara romperlo. La idea es simplemente que el componente se volvió tan complicado con todas las props que en algún momento tuvimos que declarar la bancarrota de props y decir, aquí tienes una función, hazlo. No me importa. Y eso es como expulsar de un componente, lo cual desafía todo el propósito. Todo eso es en realidad un síntoma de no entender cuán flexible queríamos que fuera realmente el componente, porque si no queríamos tantas variaciones, probablemente aún podría funcionar, pero aprendí que probablemente estemos más abajo aquí, aunque tengamos todas las cosas que dije, depende. Pero GitHub es lo suficientemente grande como para que haya tantos contextos donde el mismo componente puede aparecer. Y cambia de un componente a otro. Así que intentemos esto de nuevo con una API ligeramente más flexible en mente.
De acuerdo, la respuesta que elegí es, intentemos la composición. Intentemos hacer un componente compuesto. Entonces hay una lista de acciones, como antes, pero en lugar de recibir una matriz de elementos, acepta un hijo, que es lista de acciones.item. Y .item sabe cómo renderizar las cosas de la misma manera. Y como antes, puedes adjuntar más componentes a un componente, porque al final del día, todo son funciones. Así que puedo decir, aquí hay un elemento, y luego lista de acciones.item es ese componente, y luego la gente puede usar esta agradable API compuesta. Lo bueno es que onSelect ya está en el propio elemento. Probablemente aquí adivinarías agregarlo también cuando seleccionas un elemento, colocas el onSelect o el onClick en él, así que tiene sentido. Y luego tienes todos estos elementos. Realmente me gusta esto hasta ahora, porque tiene sentido. Se ve pequeño. No es muy confuso. Siguiente paso, separadores. Si tuvieras que adivinar cómo se vería el separador, ¿qué adivinarías? De acuerdo, tres segundos. Uno, dos, tres.
Comments