use-shopping-cart logouse-shopping-cart

loadCart()

Loads a previously saved cart, enabling cart persistence across devices or sessions. Useful for logged-in users.

Signature

loadCart(cartDetails: CartDetails, shouldMerge?: boolean): void

Parameters

  • cartDetails - The cart data to load (CartDetails object)
  • shouldMerge - Whether to merge with current cart (default: true)
    • true - Combines loaded cart with current cart
    • false - Replaces current cart entirely (recommended)

Basic Usage

import { useEffect } from 'react'
import { useShoppingCart } from 'use-shopping-cart'

function App() {
  const { loadCart } = useShoppingCart()

  useEffect(() => {
    // Load cart from your API
    async function loadUserCart() {
      const response = await fetch('/api/cart')
      const savedCart = await response.json()

      if (savedCart) {
        loadCart(savedCart, false) // Replace current cart
      }
    }

    loadUserCart()
  }, [loadCart])

  return <YourApp />
}

Load Cart on User Login

import { useEffect } from 'react'
import { useShoppingCart } from 'use-shopping-cart'
import { useUser } from './auth'

function CartSync() {
  const { loadCart } = useShoppingCart()
  const user = useUser()

  useEffect(() => {
    if (!user?.id) return

    let cancelled = false

    async function syncCart() {
      const response = await fetch(`/api/users/${user.id}/cart`)
      const userCart = await response.json()

      if (!cancelled && userCart) {
        loadCart(userCart, false)
      }
    }

    syncCart()

    return () => {
      cancelled = true
    }
  }, [user?.id, loadCart])

  return null
}

Save Cart on Changes

import { useEffect } from 'react'
import { useShoppingCart } from 'use-shopping-cart'

function CartPersistence() {
  const { cartDetails } = useShoppingCart()
  const user = useUser()

  useEffect(() => {
    if (!user?.id) return

    // Debounce saves
    const timeoutId = setTimeout(() => {
      fetch(`/api/users/${user.id}/cart`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ cartDetails })
      })
    }, 500)

    return () => clearTimeout(timeoutId)
  }, [cartDetails, user?.id])

  return null
}

Notes

  • Recommended: Set shouldMerge to false to avoid accidental duplicate merging
  • Typically used with user authentication systems
  • Cart structure must match the CartDetails type
  • Works alongside localStorage persistence (for logged-out users)

See Also

Shopping Cart

Your cart is empty

Try the interactive demos on the docs pages!