Como desarrolladores de React, todos nos hemos encontrado con escenarios en los que necesitamos representar listas de datos. Si bien el método .map() funciona bien, repetir la misma lógica cada vez que se procesa una lista puede resultar agotador y conduce a la duplicación de código. Afortunadamente, existe una forma más limpia y escalable de manejar esto: mediante componentes reutilizables, componentes de orden superior o ganchos personalizados.
En este artículo, compartiré un enfoque para mejorar la representación de listas en React, garantizando que su código permanezca SECO, reutilizable y más fácil de mantener.
Imagine que está creando un panel para una aplicación de comercio electrónico. El panel incluye varias listas: pedidos recientes, productos más vendidos, comentarios de usuarios, etc. Debe representar cada lista utilizando una función .map(). A continuación se muestra un ejemplo típico:
const orders = [...]; // Array of order data return ( {orders.map((order, index) => ())} > );
Ahora, puede ver que se repite la lógica .map() para cada lista, saturando su componente con código similar. Aquí es donde el patrón reutilizable puede resultar útil.
Para evitar duplicar la lógica .map(), podemos crear un ListComponent reutilizable que abstraiga la lógica de mapeo y nos permita representar diferentes componentes según los datos.
function ListComponent({ data, renderItem }) { return ( {data.map((item, index) => renderItem(item, index))} > ); }
Uso:
( )} />
En este patrón:
renderItem: una función que define cómo se debe representar cada elemento
Al pasar una función renderItem diferente, podemos reutilizar ListComponent para cualquier lista. Esto da como resultado un componente limpio y reutilizable, lo que reduce la lógica .map() repetitiva.
Si varios componentes necesitan renderizado de lista, llevemos este patrón más allá creando un componente de orden superior. Un HOC permite mejorar cualquier componente con funcionalidad adicional, en este caso, la representación de listas.
function withListRendering(WrappedComponent) { return function ListWrapper({ data, ...props }) { return ( {data.map((item, index) => ())} > ); }; }
Uso:
const EnhancedOrderComponent = withListRendering(OrderComponent); // Now render the component with any data array
Al envolver OrderComponent con el HOC withListRendering, agregamos automáticamente el comportamiento de representación de listas sin modificar el componente original. Este patrón mantiene el código modular.
Los ganchos de React ofrecen una forma funcional de encapsular la lógica. Si prefiere usar ganchos, aquí hay un ejemplo de representación de lista con un gancho personalizado.
function useListRenderer(data, renderItem) { return data.map((item, index) => renderItem(item, index)); }
Uso:
function OrdersDashboard({ orders }) { const orderList = useListRenderer(orders, (order, index) => ()); return {orderList}>; }
Este enfoque mueve la lógica .map() al gancho y mantiene la lógica de representación separada de la estructura del componente. Es otra forma de mantener los componentes optimizados y centrados en la presentación.
Apliquemos este patrón a un escenario del mundo real. Imagine que está creando un panel de administración de comercio electrónico donde se deben representar varias listas de pedidos, productos, reseñas, etc.
Utilizando el enfoque ListComponent, podrías generar una lista de pedidos como esta:
( )} />
Cuando necesitamos representar una lista diferente, como una lista de productos, el mismo ListComponent se puede reutilizar con una función renderItem diferente:
( )} />
No es necesario reescribir la lógica de .map(); simplemente reutilice ListComponent con diferentes datos y componentes. Esto hace que el código base sea más fácil de mantener a medida que crece.
El patrón ListComponent reutilizable simplifica la representación de la lista de React al abstraer la lógica repetitiva de .map(). Ya sea que prefiera utilizar el enfoque de componentes básicos, HOC o un gancho personalizado, este patrón garantiza que el código sea limpio y reutilizable.
Al crear un componente de React con varias listas, considere usar uno de estos patrones para mantener los componentes enfocados en la presentación mientras separa la lógica de la lista en el exterior.
¿Qué otros patrones reutilizables te han resultado útiles en React? ¡Déjamelo saber en los comentarios! y finalmente gracias por leer
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3