CÓMO CONSTRUIR UNA APLICACIÓN DE SITIO WEB DE COMERCIO ELECTRÓNICO CON REACT.JS

By raman 27 Min Read
Contents
Guía Definitiva: Construye Tu Propia Tienda Online con React.js¿Listo para crear tu propia tienda online?Por Qué React.js es Tu Mejor Aliado para un EcommerceVentajas Clave para Tu Tienda OnlinePrimeros Pasos: Configurando Tu Proyecto React.jsPrepara Tu Entorno de DesarrolloCrea la Base de Tu Tienda OnlineOrganización que Escala: Estructura de CarpetasConfigura el Enrutamiento BásicoCreando el Catálogo de Productos: Lista, Filtros y BúsquedaComponente ProductList: Tu Vitrina DigitalComponente ProductCard: Reutilización en AcciónFiltros y Búsqueda: Encuentra lo que NecesitasPaginación de Productos para Mejor ExperienciaEl Corazón del Ecommerce: Implementando el Carrito de Compras¿Por Qué Necesitas un Estado Global?Creando el Contexto del Carrito (CartContext)Componente CartWidget: Tu Indicador del CarritoPágina del Carrito: Ver y Gestionar Tu SelecciónDel Carrito a la Compra: Checkout y AutenticaciónCreando el Formulario de CheckoutImplementando Autenticación BásicaConectando con el Mundo Real: Pagos y BackendSimulando una Conexión a una API BackendIntegrando una Pasarela de Pago (Ejemplo con Stripe)El Papel Crucial de las Variables de EntornoPreparando Tu Tienda para ProducciónDiseño Responsive: Imprescindible en 2024Pruebas Básicas para Mayor ConfiabilidadDespliegue en Vercel: Tu Tienda Online en MinutosTu Tienda Online con React.js está ListaPróximos Pasos y Recursos¿Quieres Aprender Más?Preguntas Frecuentes sobre Ecommerce con React.js¿React.js es bueno para el SEO de una tienda online?¿Puedo usar esta guía con un backend como Firebase o Django?¿Es obligatorio usar Redux para el carrito de compras?¿Cuánto cuesta desplegar una tienda hecha con React.js?¿Te gustó esta guía?

Guía Definitiva: Construye Tu Propia Tienda Online con React.js

¿Listo para crear tu propia tienda online?

El comercio electrónico no es solo el futuro, es el presente. Con millones de compras online cada día, tener una tienda virtual robusta y atractiva es crucial. Pero, ¿cómo crear una sin gastar una fortuna en desarrollo? La respuesta está en tus propias habilidades.

Imagina poder construir una aplicación de comercio electrónico con React.js que sea rápida, moderna y totalmente bajo tu control. En esta guía completa, te llevaré de la mano en cada paso para desarrollar un ecommerce completo con React.js. Desde la primera línea de código hasta el despliegue en producción, cubriremos todo lo que necesitas.

React.js se ha convertido en el rey del frontend por una razón: sus componentes reutilizables, su alto rendimiento y su enorme ecosistema lo hacen ideal para desarrollar la interfaz de una tienda online. Según el State of JS 2023, React mantiene una adopción del 80% entre desarrolladores frontend, demostrando su dominio en la creación de aplicaciones web complejas.

Al final de este tutorial práctico y paso a paso, no solo tendrás una aplicación funcional, sino el conocimiento profundo para personalizarla y escalarla a tus necesidades. ¿Empezamos?

Por Qué React.js es Tu Mejor Aliado para un Ecommerce

Ventajas Clave para Tu Tienda Online

Cuando hablamos de React.js para tiendas online, no es una moda pasajera. Hay razones técnicas sólidas que lo convierten en la mejor opción:

Componentes Reutilizables = Desarrollo Rápido
En un proyecto práctico React ecommerce, elementos como las tarjetas de producto, botones de «añadir al carrito» o los filtros se usan una y otra vez. Con React, creas estos componentes React comercio electrónico una sola vez y los reutilizas en toda tu aplicación. Esto acelera enormemente el desarrollo y facilita el mantenimiento.

Gestión de Estado Predecible
¿Cómo manejar el carrito de compras, los datos del usuario o el catálogo de productos? React, junto con herramientas como Context API o Redux, ofrece soluciones elegantes para la gestión de estado (Redux/Context). Esto significa que tu aplicación se comportará de manera consistente, algo fundamental en una tienda online donde cada interacción cuenta.

Rendimiento que Retiene Clientes
La optimización de rendimiento es crucial. Nadie espera más de 3 segundos para ver un producto. React Virtual DOM y técnicas como code splitting aseguran que tu tienda cargue rápido y sea suave al navegar. Para SEO avanzado, luego podrás migrar fácilmente a Next.js y aprovechar su renderizado del lado del servidor.

Un Ecosistema que lo Tiene Todo
Desde enrutamiento con React Router hasta bibliotecas de UI como Material-UI, el ecosistema React está maduro y lleno de soluciones probadas para cualquier desafío de desarrollo de comercio electrónico.

Primeros Pasos: Configurando Tu Proyecto React.js

Prepara Tu Entorno de Desarrollo

Antes de escribir código, necesitamos las herramientas adecuadas. Para este tutorial crear tienda online con React.js, necesitarás:

  • Node.js (versión 16 o superior): El motor detrás de npm y tu entorno de ejecución.

  • Un editor de código: Visual Studio Code es altamente recomendado por su integración con JavaScript.

  • Navegador moderno: Chrome o Firefox con herramientas de desarrollador.

Crea la Base de Tu Tienda Online

Abre tu terminal y ejecuta el comando mágico que iniciará todo:

bash
npx create-react-app mi-tienda-online
cd mi-tienda-online
npm start

¡Enhorabuena! Ya tienes una aplicación React básica funcionando en http://localhost:3000.

Organización que Escala: Estructura de Carpetas

Una buena organización desde el principio te ahorrará dolores de cabeza. Te recomiendo esta estructura:

text
mi-tienda-online/
├── src/
│   ├── components/     # Componentes reutilizables
│   ├── context/        # Contextos para estado global
│   ├── pages/          # Páginas principales
│   ├── services/       # Llamadas a APIs
│   ├── styles/         # Estilos CSS/SCSS
│   ├── utils/          # Funciones helper
│   └── App.js          # Componente raíz

Configura el Enrutamiento Básico

Instala React Router para la navegación entre páginas:

bash
npm install react-router-dom

Ahora, configura las rutas básicas en tu App.js:

jsx
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import Cart from './pages/Cart';
import Checkout from './pages/Checkout';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/cart" element={<Cart />} />
        <Route path="/checkout" element={<Checkout />} />
      </Routes>
    </BrowserRouter>
  );
}

Con esto, ya tienes la base sólida para empezar a construir tu aplicación de comercio electrónico.

Creando el Catálogo de Productos: Lista, Filtros y Búsqueda

Componente ProductList: Tu Vitrina Digital

El corazón de cualquier tienda online es su catálogo. Vamos a crear un componente que muestre tus productos de forma atractiva.

Primero, simulemos datos de productos. Crea un archivo src/data/products.js:

javascript
const products = [
  {
    id: 1,
    name: "Zapatillas Running Pro",
    price: 89.99,
    image: "https://ejemplo.com/zapatillas.jpg",
    category: "Calzado",
    stock: 15
  },
  // Más productos aquí...
];

export default products;

Ahora, crea src/components/ProductList.js:

jsx
import { useState, useEffect } from 'react';
import ProductCard from './ProductCard';
import products from '../data/products';

function ProductList() {
  const [productos, setProductos] = useState([]);
  
  // Simulamos la carga asíncrona de datos
  useEffect(() => {
    // En un caso real, aquí harías fetch a tu API
    setProductos(products);
  }, []);
  
  return (
    <div className="product-list">
      <h2>Nuestros Productos</h2>
      <div className="grid">
        {productos.map(producto => (
          <ProductCard key={producto.id} producto={producto} />
        ))}
      </div>
    </div>
  );
}

Fíjate cómo usamos hooks de React (useState, useEffect) para cargar datos asíncronos. Este patrón es fundamental en aplicaciones React reales.

Componente ProductCard: Reutilización en Acción

Crea src/components/ProductCard.js:

jsx
function ProductCard({ producto }) {
  const { name, price, image } = producto;
  
  return (
    <div className="product-card">
      <img src={image} alt={name} />
      <h3>{name}</h3>
      <p className="price">${price.toFixed(2)}</p>
      <button className="add-to-cart">
        Añadir al Carrito
      </button>
    </div>
  );
}

Este es un perfecto ejemplo de componentes reutilizables – lo usarás para cada producto en tu catálogo.

Filtros y Búsqueda: Encuentra lo que Necesitas

Los usuarios necesitan encontrar productos rápidamente. Añadamos filtros y búsqueda:

jsx
function ProductList() {
  const [productos, setProductos] = useState([]);
  const [filtro, setFiltro] = useState('');
  const [categoria, setCategoria] = useState('todas');
  
  const productosFiltrados = productos.filter(p => {
    const coincideTexto = p.name.toLowerCase().includes(filtro.toLowerCase());
    const coincideCategoria = categoria === 'todas' || p.category === categoria;
    return coincideTexto && coincideCategoria;
  });
  
  return (
    <div>
      <div className="filtros">
        <input
          type="text"
          placeholder="Buscar productos..."
          value={filtro}
          onChange={(e) => setFiltro(e.target.value)}
        />
        <select value={categoria} onChange={(e) => setCategoria(e.target.value)}>
          <option value="todas">Todas las categorías</option>
          <option value="Calzado">Calzado</option>
          <option value="Ropa">Ropa</option>
        </select>
      </div>
      {/* Renderizar productosFiltrados en lugar de productos */}
    </div>
  );
}

Paginación de Productos para Mejor Experiencia

Si tienes muchos productos, la paginación de productos es esencial:

jsx
const [paginaActual, setPaginaActual] = useState(1);
const productosPorPagina = 9;

const indiceInicio = (paginaActual - 1) * productosPorPagina;
const indiceFin = indiceInicio + productosPorPagina;
const productosPagina = productosFiltrados.slice(indiceInicio, indiceFin);

// Renderizar productosPagina en lugar de todos

Con esto, tu catálogo ya es funcional y profesional.

El Corazón del Ecommerce: Implementando el Carrito de Compras

¿Por Qué Necesitas un Estado Global?

Imagina que añades un producto al carrito desde la página de catálogo, y necesitas que el icono del carrito en el navbar se actualice instantáneamente. Los componentes no conectados no pueden comunicarse directamente. Ahí entra la gestión de estado (Redux/Context).

Para nuestra tienda, usaremos Context API de React – es perfecta para proyectos de tamaño medio y más fácil de aprender para comenzar.

Creando el Contexto del Carrito (CartContext)

Crea src/context/CartContext.js:

jsx
import { createContext, useState, useContext } from 'react';

const CartContext = createContext();

export function CartProvider({ children }) {
  const [cart, setCart] = useState([]);
  
  const addToCart = (producto) => {
    setCart(currentCart => {
      const existe = currentCart.find(item => item.id === producto.id);
      if (existe) {
        return currentCart.map(item =>
          item.id === producto.id
            ? { ...item, cantidad: item.cantidad + 1 }
            : item
        );
      }
      return [...currentCart, { ...producto, cantidad: 1 }];
    });
  };
  
  const removeFromCart = (id) => {
    setCart(currentCart => currentCart.filter(item => item.id !== id));
  };
  
  const updateQuantity = (id, cantidad) => {
    if (cantidad < 1) {
      removeFromCart(id);
      return;
    }
    setCart(currentCart =>
      currentCart.map(item =>
        item.id === id ? { ...item, cantidad } : item
      )
    );
  };
  
  const total = cart.reduce((sum, item) => sum + (item.price * item.cantidad), 0);
  
  return (
    <CartContext.Provider value={{
      cart,
      addToCart,
      removeFromCart,
      updateQuantity,
      total,
      itemCount: cart.reduce((sum, item) => sum + item.cantidad, 0)
    }}>
      {children}
    </CartContext.Provider>
  );
}

export const useCart = () => useContext(CartContext);

¡Este contexto de React (Context API) es el cerebro de tu carrito de compras React! Maneja toda la lógica de añadir, eliminar y actualizar cantidades.

Componente CartWidget: Tu Indicador del Carrito

Crea un componente pequeño para mostrar el número de items en el carrito:

jsx
import { useCart } from '../context/CartContext';
import { Link } from 'react-router-dom';

function CartWidget() {
  const { itemCount } = useCart();
  
  if (itemCount === 0) return null;
  
  return (
    <Link to="/cart" className="cart-widget">
      🛒
      <span className="cart-count">{itemCount}</span>
    </Link>
  );
}

Añádelo a tu navbar y verás cómo se actualiza mágicamente cuando añades productos.

Página del Carrito: Ver y Gestionar Tu Selección

Crea src/pages/Cart.js:

jsx
import { useCart } from '../context/CartContext';
import { Link } from 'react-router-dom';

function Cart() {
  const { cart, removeFromCart, updateQuantity, total } = useCart();
  
  if (cart.length === 0) {
    return (
      <div className="cart-empty">
        <h2>Tu carrito está vacío</h2>
        <Link to="/">Volver a comprar</Link>
      </div>
    );
  }
  
  return (
    <div className="cart-page">
      <h2>Tu Carrito de Compras</h2>
      {cart.map(item => (
        <div key={item.id} className="cart-item">
          <img src={item.image} alt={item.name} />
          <div>
            <h3>{item.name}</h3>
            <p>${item.price.toFixed(2)} c/u</p>
            <div className="quantity-controls">
              <button onClick={() => updateQuantity(item.id, item.cantidad - 1)}>
                -
              </button>
              <span>{item.cantidad}</span>
              <button onClick={() => updateQuantity(item.id, item.cantidad + 1)}>
                +
              </button>
            </div>
            <button onClick={() => removeFromCart(item.id)} className="remove">
              Eliminar
            </button>
          </div>
          <p className="item-total">
            ${(item.price * item.cantidad).toFixed(2)}
          </p>
        </div>
      ))}
      <div className="cart-summary">
        <h3>Total: ${total.toFixed(2)}</h3>
        <Link to="/checkout" className="checkout-button">
          Proceder al Pago
        </Link>
      </div>
    </div>
  );
}

¡Felicidades! Ya has implementado un carrito de compras en React.js paso a paso completamente funcional. Este es quizás el componente más importante de cualquier aplicación de comercio electrónico.

Del Carrito a la Compra: Checkout y Autenticación

Creando el Formulario de Checkout

El proceso de pago debe ser sencillo y seguro. Crea src/pages/Checkout.js:

jsx
import { useState } from 'react';
import { useCart } from '../context/CartContext';

function Checkout() {
  const { cart, total } = useCart();
  const [formData, setFormData] = useState({
    nombre: '',
    email: '',
    direccion: '',
    ciudad: '',
    tarjeta: ''
  });
  
  const handleChange = (e) => {
    setFormData({
      ...formData,
      [e.target.name]: e.target.value
    });
  };
  
  const handleSubmit = async (e) => {
    e.preventDefault();
    // Validación básica
    if (!formData.nombre || !formData.email) {
      alert('Por favor completa todos los campos');
      return;
    }
    
    // Aquí procesaríamos el pago
    console.log('Procesando pedido:', { formData, cart, total });
    alert('¡Pedido completado con éxito! (simulación)');
  };
  
  return (
    <div className="checkout-page">
      <h2>Finalizar Compra</h2>
      <div className="checkout-container">
        <form onSubmit={handleSubmit} className="checkout-form">
          <h3>Información de Envío</h3>
          <input
            name="nombre"
            placeholder="Nombre completo"
            value={formData.nombre}
            onChange={handleChange}
            required
          />
          <input
            name="email"
            type="email"
            placeholder="Email"
            value={formData.email}
            onChange={handleChange}
            required
          />
          {/* Más campos aquí */}
          
          <h3>Método de Pago</h3>
          <input
            name="tarjeta"
            placeholder="Número de tarjeta"
            value={formData.tarjeta}
            onChange={handleChange}
          />
          
          <button type="submit" className="submit-order">
            Pagar ${total.toFixed(2)}
          </button>
        </form>
        
        <div className="order-summary">
          <h3>Resumen del Pedido</h3>
          {cart.map(item => (
            <div key={item.id} className="order-item">
              <span>{item.name} x {item.cantidad}</span>
              <span>${(item.price * item.cantidad).toFixed(2)}</span>
            </div>
          ))}
          <div className="order-total">
            <strong>Total:</strong>
            <strong>${total.toFixed(2)}</strong>
          </div>
        </div>
      </div>
    </div>
  );
}

Implementando Autenticación Básica

Para guardar el historial de pedidos, necesitamos autenticación de usuarios. Creemos un contexto simple:

jsx
// src/context/AuthContext.js
import { createContext, useState, useContext } from 'react';

const AuthContext = createContext();

export function AuthProvider({ children }) {
  const [user, setUser] = useState(null);
  
  const login = (email, password) => {
    // Simulación - en realidad validarías con backend
    if (email && password) {
      setUser({ email, name: 'Usuario Demo' });
      return true;
    }
    return false;
  };
  
  const logout = () => {
    setUser(null);
  };
  
  return (
    <AuthContext.Provider value={{ user, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
}

export const useAuth = () => useContext(AuthContext);

Con esto, ya puedes conectar React frontend con backend para ecommerce en el futuro, añadiendo llamadas reales a tu API.

Conectando con el Mundo Real: Pagos y Backend

Simulando una Conexión a una API Backend

En una aplicación real, tu frontend de React se comunicaría con un backend. Así es cómo cómo conectar React frontend con backend de forma básica:

Crea src/services/api.js:

javascript
const API_URL = process.env.REACT_APP_API_URL || 'http://localhost:5000/api';

export async function createOrder(orderData) {
  const response = await fetch(`${API_URL}/orders`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(orderData)
  });
  
  if (!response.ok) {
    throw new Error('Error al crear el pedido');
  }
  
  return response.json();
}

export async function getProducts() {
  const response = await fetch(`${API_URL}/products`);
  return response.json();
}

Esta es una API RESTful típica que podrías consumir desde tus componentes.

Integrando una Pasarela de Pago (Ejemplo con Stripe)

La pasarela de pago integración es crucial. Para Stripe, primero instala el SDK:

bash
npm install @stripe/stripe-js

Luego, en tu componente de checkout:

jsx
import { loadStripe } from '@stripe/stripe-js';

const stripePromise = loadStripe('tu_llave_publica');

async function handleStripeCheckout() {
  const stripe = await stripePromise;
  
  const response = await fetch(`${API_URL}/create-checkout-session`, {
    method: 'POST',
    body: JSON.stringify({ cart, userInfo: formData })
  });
  
  const session = await response.json();
  
  const result = await stripe.redirectToCheckout({
    sessionId: session.id
  });
  
  if (result.error) {
    alert(result.error.message);
  }
}

Nota importante: Nunca expongas tus claves secretas en el frontend. El proceso real involucra tu backend creando la sesión de checkout.

Para integrar PayPal en una app React.js, el proceso es similar pero con el SDK de PayPal.

El Papel Crucial de las Variables de Entorno

Nunca hardcodees claves de API en tu código. Usa variables de entorno:

javascript
// En tu .env.local (no subir a GitHub!)
REACT_APP_STRIPE_PUBLIC_KEY=pk_test_tu_llave
REACT_APP_API_URL=https://tu-backend.com/api

Accede a ellas así:

javascript
const stripeKey = process.env.REACT_APP_STRIPE_PUBLIC_KEY;

Preparando Tu Tienda para Producción

Diseño Responsive: Imprescindible en 2024

Tu tienda debe verse bien en todos los dispositivos. Usa CSS Grid y Flexbox:

css
/* En tu App.css */
.product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 2rem;
  padding: 2rem;
}

@media (max-width: 768px) {
  .product-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 1rem;
    padding: 1rem;
  }
}

@media (max-width: 480px) {
  .product-grid {
    grid-template-columns: 1fr;
  }
}

El diseño responsive no es un lujo, es una necesidad. Más del 60% de las compras online se realizan desde móviles.

Pruebas Básicas para Mayor Confiabilidad

Las pruebas (testing) garantizan que tu tienda funcione correctamente. Instala React Testing Library:

bash
npm install --save-dev @testing-library/react @testing-library/jest-dom

Crea una prueba básica para tu ProductCard:

jsx
// src/components/ProductCard.test.js
import { render, screen } from '@testing-library/react';
import ProductCard from './ProductCard';

test('muestra el nombre y precio del producto', () => {
  const mockProduct = {
    id: 1,
    name: 'Producto Test',
    price: 29.99,
    image: 'test.jpg'
  };
  
  render(<ProductCard producto={mockProduct} />);
  
  expect(screen.getByText('Producto Test')).toBeInTheDocument();
  expect(screen.getByText('$29.99')).toBeInTheDocument();
});

Despliegue en Vercel: Tu Tienda Online en Minutos

El despliegue (deployment) nunca fue tan fácil. Con Vercel:

  1. Sube tu código a GitHub

  2. Ve a vercel.com

  3. Conecta tu repositorio

  4. ¡Listo! Tu tienda estará online en minutos

Vercel detecta automáticamente que es una aplicación React y configura todo por ti. Incluye HTTPS gratis, CDN global y despliegues instantáneos.

Tu Tienda Online con React.js está Lista

¡Lo lograste! Has completado este tutorial completo ecommerce React.js desde cero. Repasemos lo que construiste:

✅ Configuración profesional de un proyecto React con estructura escalable
✅ Catálogo de productos con filtros, búsqueda y paginación
✅ Sistema completo de carrito con gestión de estado global
✅ Proceso de checkout con formularios validados
✅ Integración con pasarelas de pago (simulada, lista para conectar)
✅ Aplicación lista para producción con diseño responsive

Próximos Pasos y Recursos

Tu viaje acaba de comenzar. Para llevar tu tienda al siguiente nivel:

  1. Conecta un Backend Real: Mira nuestro tutorial crear tienda online con React.js y Node.js para añadir MongoDB, autenticación real y panel de administración.

  2. Mejora el SEO: Implementa Next.js para renderizado del lado del servidor y mejores posiciones en Google.

  3. Añade Funcionalidades Avanzadas: Sistema de reviews, recomendaciones personalizadas, múltiples métodos de pago.

  4. Descarga el Código Completo: ¿Quieres el proyecto completo con estilos avanzados y más características? Descarga el repositorio completo desde GitHub.

¿Quieres Aprender Más?

  • Curso Avanzado de React para Ecommerce: Patrones avanzados y optimizaciones

  • Guía de Performance: Lleva tu tienda de 0 a 100 en Lighthouse

  • Monetización y Marketing: Cómo hacer que tu tienda genere ingresos

Preguntas Frecuentes sobre Ecommerce con React.js

¿React.js es bueno para el SEO de una tienda online?

React por sí solo tiene desafíos de SEO porque renderiza en el cliente. Sin embargo, usando Next.js (framework de React) con renderizado del lado del servidor (SSR) o generación estática (SSG), obtienes excelente SEO. Muchas grandes tiendas online usan esta combinación.

¿Puedo usar esta guía con un backend como Firebase o Django?

¡Absolutamente! Los principios son los mismos. Solo cambiaría cómo cargas datos asíncronos desde tu API. En lugar de un archivo local, harías fetch a tu backend de Firebase o Django REST Framework.

¿Es obligatorio usar Redux para el carrito de compras?

No, para nada. Como vimos, Context API es suficiente para la mayoría de tiendas medianas. Redux es excelente para aplicaciones muy complejas con mucha lógica de estado, pero añade complejidad. Empieza con Context y migra solo si lo necesitas.

¿Cuánto cuesta desplegar una tienda hecha con React.js?

Puede ser completamente gratis al principio. Vercel, Netlify y GitHub Pages ofrecen planes gratuitos. Solo pagarás cuando tengas mucho tráfico. El dominio (tutienda.com) cuesta alrededor de $10-15 anuales.

¿Te gustó esta guía?

Suscríbete a nuestro newsletter para recibir más tutoriales prácticos sobre desarrollo web, actualizaciones de React y consejos exclusivos para optimizar tu aplicación de comercio electrónico.

¿Tienes preguntas o quieres compartir tu proyecto? ¡Déjanos un comentario abajo! Nos encanta ver lo que construye nuestra comunidad.

¿Listo para comenzar tu próxima tienda online? ¡El código te espera! 

Share This Article