# CartProvider


    The `CartProvider` component synchronizes the state of the Storefront API Cart and a customer's cart, and allows you to more easily manipulate the cart by adding, removing, and updating it. It could be placed at the root of your app so that your whole app is able to use the `useCart()` hook anywhere.

There are props that trigger when a call to the Storefront API is made, such as `onLineAdd={}` when a line is added to the cart. There are also props that trigger when a call to the Storefront API is completed, such as `onLineAddComplete={}` when the fetch request for adding a line to the cart completes.

The `CartProvider` component must be a descendant of the `ShopifyProvider` component
.
  
### Example code

```jsx
import {CartProvider, useCart} from '@shopify/hydrogen-react';

export function App() {
  <CartProvider
    onLineAdd={() => {
      console.log('a line is being added');
    }}
    onLineAddComplete={() => {
      console.log('a line has been added');
    }}
  >
    <CartComponent />
  </CartProvider>;
}

function CartComponent() {
  const {linesAdd, status} = useCart();

  const merchandise = {merchandiseId: '{id-here}'};

  return (
    <div>
      Cart Status: {status}
      <button onClick={() => linesAdd([merchandise])}>Add Line</button>
    </div>
  );
}

```

```tsx
import {CartProvider, useCart} from '@shopify/hydrogen-react';
import type {CartLineInput} from '@shopify/hydrogen-react/storefront-api-types';

export function App() {
  <CartProvider
    onLineAdd={() => {
      console.log('a line is being added');
    }}
    onLineAddComplete={() => {
      console.log('a line has been added');
    }}
  >
    <CartComponent />
  </CartProvider>;
}

function CartComponent() {
  const {linesAdd, status} = useCart();

  const merchandise: CartLineInput = {merchandiseId: '{id-here}'};

  return (
    <div>
      Cart Status: {status}
      <button onClick={() => linesAdd([merchandise])}>Add Line</button>
    </div>
  );
}

```



## Props


### CartProviderProps


### cartFragment

value: `string`

A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2025-01/objects/cart) for all queries and mutations. A default value is used if no argument is provided.

### children

value: `React.ReactNode`

Any `ReactNode` elements.

### countryCode

value: `CountryCode`

The ISO country code for i18n.

### customerAccessToken

value: `string`

A customer access token that's accessible on the server if there's a customer login.

### data

value: `PartialDeep<CartType, {recurseIntoArrays: true}>`

An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2025-01/objects/cart).

### languageCode

value: `LanguageCode`

The ISO language code for i18n.

### numCartLines

value: `number`

Maximum number of cart lines to fetch. Defaults to 250 cart lines.

### onAttributesUpdate

value: `() => void`

A callback that is invoked when the process to update the cart attributes begins, but before the attributes are updated in the Storefront API.

### onAttributesUpdateComplete

value: `() => void`

A callback that is invoked when the process to update the cart attributes completes

### onBuyerIdentityUpdate

value: `() => void`

A callback that is invoked when the process to update the buyer identity begins, but before the buyer identity is updated in the Storefront API.

### onBuyerIdentityUpdateComplete

value: `() => void`

A callback that is invoked when the process to update the buyer identity completes

### onCreate

value: `() => void`

A callback that is invoked when the process to create a cart begins, but before the cart is created in the Storefront API.

### onCreateComplete

value: `() => void`

A callback that is invoked when the process to create a cart completes

### onDiscountCodesUpdate

value: `() => void`

A callback that is invoked when the process to update the cart discount codes begins, but before the discount codes are updated in the Storefront API.

### onDiscountCodesUpdateComplete

value: `() => void`

A callback that is invoked when the process to update the cart discount codes completes

### onLineAdd

value: `() => void`

A callback that is invoked when the process to add a line item to the cart begins, but before the line item is added to the Storefront API.

### onLineAddComplete

value: `() => void`

A callback that is invoked when the process to add a line item to the cart completes

### onLineRemove

value: `() => void`

A callback that is invoked when the process to remove a line item to the cart begins, but before the line item is removed from the Storefront API.

### onLineRemoveComplete

value: `() => void`

A callback that is invoked when the process to remove a line item to the cart completes

### onLineUpdate

value: `() => void`

A callback that is invoked when the process to update a line item in the cart begins, but before the line item is updated in the Storefront API.

### onLineUpdateComplete

value: `() => void`

A callback that is invoked when the process to update a line item in the cart completes

### onNoteUpdate

value: `() => void`

A callback that is invoked when the process to add or update a note in the cart begins, but before the note is added or updated in the Storefront API.

### onNoteUpdateComplete

value: `() => void`

A callback that is invoked when the process to add or update a note in the cart completes

## Related
- [useCart](/api/hydrogen-react/hooks/useCart)
- [ShopifyProvider](/api/hydrogen-react/components/shopifyprovider)