Skip to main content

Quickstart

The @vtex/ads-react package provides React-specific components and hooks for integrating VTEX Ads into React applications. It offers a declarative API with built-in loading states, error handling, and request batching.

Installation​

Install the package using npm or yarn:

npm install @vtex/ads-react
# or
yarn add @vtex/ads-react

The @vtex/ads-react package automatically includes @vtex/ads-core as a dependency.

Basic Usage​

Seting Up the AdsProvider​

Before requesting any ads, wrap your app or page component tree with the <AdsProvider>. This provider is responsible for managing ad requests and distributing results to child components.

import React from "react";
import { AdsProvider } from "@vtex/ads-react";
import {
intelligentSearchFetcher,
intelligentSearchMatcher,
} from "@vtex/ads-core";

function App() {
return (
<AdsProvider
identity={{
accountName: "your-account-name",
publisherId: "your-publisher-id",
userId: "user-123",
sessionId: "session-456",
channel: "web", // optional: "web" | "mobile"
}}
hydrationStrategy={{
fetcher: intelligentSearchFetcher,
matcher: intelligentSearchMatcher,
}}
>
<YourAppContent />
</AdsProvider>
);
}

export default App;

You only need one <AdsProvider> around the subtree where ads will be requested.

Please refer to the Custom Hydration guide for more details on configuring the hydration strategy.

Use the useAds Hook​

Call useAds() inside your component to request ads for a specific placement:

const { ads, isLoading, error } = useAds({
placement: "search_top_product",
type: "product",
amount: 3,
term: "smartphone",
});

The ads hooks will return an object with the following properties:

  • ads, an array of sponsored items matching the criteria.
  • isLoading, which is true while the request is in progress.
  • error, that will be populated if the request fails.

You can call useAds() multiple times within the same component to request different placements.

const { ads: searchAds, isLoading: isSearchAdsLoading } = useAds({
placement: "search_top_product",
type: "product",
amount: 2,
term: "tv",
});

const { ads: shelfAds, isLoading: isShelfAdsLoading } = useAds({
placement: "search_top-shelf_product",
type: "product",
amount: 10,
term: "tv",
});