ConverlayConverlay

React Integration

The @converlay/sdk/react entry point provides a ConverlayProvider component and a useConverlay() hook for React applications. Requires React 18 or later.

ConverlayProvider

Wrap your application with the provider to make the Converlay instance available throughout your component tree.

ConverlayProvider props
<ConverlayProvider
  shopDomain="my-store.myshopify.com"  // Required
  autoPageView={true}                   // Auto page_view on mount
  debug={false}                         // Console logging
  endpoint="..."                        // Custom endpoint
  consent={{ analytics: true, marketing: true }}
>
  {children}
</ConverlayProvider>

useConverlay()

Access the Converlay instance from any child component.

useConverlay() hook
'use client'

import { useConverlay } from '@converlay/sdk/react'

function ProductPage({ product }) {
  const { track, identify, setConsent, flush, destroy } = useConverlay()

  useEffect(() => {
    track('view_item', {
      ecommerce: {
        items: [{
          item_id: product.id,
          item_name: product.title,
          price: product.price,
          quantity: 1,
        }],
      },
    })
  }, [product.id])

  return <div>{/* ... */}</div>
}

The hook returns the full ConverlayInstance:

  • track(eventName, properties?)
  • identify(data)
  • setConsent(consent)
  • flush()
  • destroy()

Framework setup

Next.js App Router

Client component required

The provider must be in a client component ('use client'). Create a separate Providers component and import it in your root layout.

Next.js App Router
// app/providers.tsx
'use client'

import { ConverlayProvider } from '@converlay/sdk/react'

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <ConverlayProvider
      shopDomain="my-store.myshopify.com"
      autoPageView={true}
    >
      {children}
    </ConverlayProvider>
  )
}

// app/layout.tsx
import { Providers } from './providers'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <Providers>{children}</Providers>
      </body>
    </html>
  )
}

Next.js Pages Router

Next.js Pages Router
// pages/_app.tsx
import { ConverlayProvider } from '@converlay/sdk/react'

export default function App({ Component, pageProps }) {
  return (
    <ConverlayProvider
      shopDomain="my-store.myshopify.com"
      autoPageView={true}
    >
      <Component {...pageProps} />
    </ConverlayProvider>
  )
}

Shopify Hydrogen

Hydrogen (Remix)
// app/root.tsx
import { ConverlayProvider } from '@converlay/sdk/react'

export default function App() {
  return (
    <ConverlayProvider
      shopDomain="my-store.myshopify.com"
      autoPageView={true}
    >
      <Outlet />
    </ConverlayProvider>
  )
}

Route change tracking

If autoPageView is true, the SDK fires page_view once on mount. For client-side navigations (SPA), add a route tracker:

Route tracker
'use client'

import { usePathname } from 'next/navigation'
import { useConverlay } from '@converlay/sdk/react'
import { useEffect } from 'react'

export function RouteTracker() {
  const pathname = usePathname()
  const { track } = useConverlay()

  useEffect(() => {
    track('page_view')
  }, [pathname])

  return null
}