javascript

Clase para carrito de compras con JavaScript y LocalStorage

En este post te mostraré una librería de JavaScript para guardar un carrito de compras en JavaScript del lado del cliente. Será una simple clase que encerrará el comportamiento y brindará funciones para todas las operaciones.

Como dice el título, se usará localStorage para guardar y recuperar los valores, de este modo no importa el lenguaje del lado del servidor, pues se usará el lado del cliente.

Por ahora te mostraré solo la librería/Clase, no su uso. Ya más adelante te traeré un ejemplo completo.

Funcionamiento

Básicamente se trabaja con un arreglo de JavaScript usando sus operaciones como push o splice. Luego, todo este arreglo es guardado en localStorage. Recuerda que con localStorage solo podemos manejar cadenas, así que antes de guardarlo se codifica como JSON.

Del mismo modo, al traerlo de vuelta, se decodifica el JSON y se convierte automáticamente en un arreglo de JavaScript válido. Esta operación se hace en el constructor, así no estamos leyendo de localStorage en cada movimiento.

Código de la clase

La clase se llama Carrito. Al instanciarse se puede pasar un parámetro opcional para indicar la clave que se usará al guardar el arreglo dentro de localStorage; por defecto es productos.

Ya después vemos varios métodos:

/*

  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me               /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Creado por Parzibyte (https://parzibyte.me).
------------------------------------------------------------------------------------------------
Si el código es útil para ti, puedes agradecerme siguiéndome: https://parzibyte.me/blog/sigueme/
Y compartiendo mi blog con tus amigos
También tengo canal de YouTube: https://www.youtube.com/channel/UCroP4BTWjfM0CkGB6AFUoBg?sub_confirmation=1
------------------------------------------------------------------------------------------------
*/class Carrito {
    constructor(clave) {
        this.clave = clave || "productos";
        this.productos = this.obtener();
    }

    agregar(producto) {
        if (!this.existe(producto.id)) {
            this.productos.push(producto);
            this.guardar();
        }
    }

    quitar(id) {
        const indice = this.productos.findIndex(p => p.id === id);
        if (indice != -1) {
            this.productos.splice(indice, 1);
            this.guardar();
        }
    }

    guardar() {
        localStorage.setItem(this.clave, JSON.stringify(this.productos));
    }

    obtener() {
        const productosCodificados = localStorage.getItem(this.clave);
        return JSON.parse(productosCodificados) || [];
    }

    existe(id) {
        return this.productos.find(producto => producto.id === id);
    }

    obtenerConteo() {
        return this.productos.length;
    }


}

Los importantes son pocos, como agregar que recibe un producto y lo agrega en caso de que no exista. También tenemos el método obtener que devuelve el arreglo de productos, y el método quitar que remueve el objeto del carrito de compras.

Las operaciones de guardado y lectura se hacen automáticamente. Por ejemplo, se lee de localStorage en el constructor, y se guarda en el método guardar. Este método no se debería invocar desde fuera de la clase, pues se invoca cuando se quita o agrega un elemento.

Esta librería supone que los productos son objetos y que entre todas sus propiedades tienen un id.

Conclusión

En los próximos artículos te mostraré cómo usar esta clase, aunque con lo explicado anteriormente ya puedes darte una idea. Igualmente eres libre de modificar el código, mejorarlo, etcétera.

Esto se puede integrar con Vue, Angular, React o cualquier framework del lado del cliente. De este modo almacenamos el carrito de compras en el navegador, sin meternos con sesiones o cosas externas del servidor.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 hora hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

6 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

6 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

6 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

6 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

6 días hace

Esta web usa cookies.