Skip to main content

Usage with React

Integrating Divisor into React applications is simple. We recommend creating a Context or a custom hook to manage the client.

Provider Example

Create a DivisorProvider to make the client available throughout your application.

// DivisorContext.tsx
import React, { createContext, useContext, useMemo } from 'react';
import { DivisorClient } from '@divisor.dev/sdk';

const DivisorContext = createContext<DivisorClient | null>(null);

export const DivisorProvider: React.FC<{
tenantId: string;
userId?: string;
children: React.ReactNode
}> = ({
tenantId,
userId,
children
}) => {
const client = useMemo(() => new DivisorClient({ tenantId, userId }), [tenantId, userId]);

return (
<DivisorContext.Provider value={client}>
{children}
</DivisorContext.Provider>
);
};

export const useDivisor = () => {
const context = useContext(DivisorContext);
if (!context) {
throw new Error('useDivisor must be used within a DivisorProvider');
}
return context;
};

Using in Components

You can use the hook to fetch variants within your components.

import { useEffect, useState } from 'react';
import { useDivisor } from './DivisorContext';

const HeroSection = () => {
const divisor = useDivisor();
const [variant, setVariant] = useState<string | null>(null);

useEffect(() => {
divisor.getVariant({
experimentName: 'hero-title-test',
variantFallback: 'control'
}).then(result => setVariant(result.variant));
}, [divisor]);

if (variant === 'v1') {
return (
<div>
<h1>Increase your sales today!</h1>
<button onClick={() => divisor.conversion({
experimentName: 'hero-title-test',
variant: 'v1',
value: 100,
itensCount: 1
})}>
Buy Now
</button>
</div>
);
}

return <h1>Welcome to Divisor</h1>;
};

SSR Tips (Next.js)

If you are using Next.js with App Router, you can initialize the client directly in Server Components:

// page.tsx (Server Component)
import { DivisorClient } from '@divisor.dev/sdk';

export default async function Page() {
const divisor = new DivisorClient({
tenantId: process.env.DIVISOR_TENANT_ID!,
userId: 'server-user-id' // Optional
});
const { variant } = await divisor.getVariant({ experimentName: 'home-test' });

return (
<div>
{variant === 'A' ? <ComponentA /> : <ComponentB />}
</div>
);
}