@datanova/react
Version:
React SDK for event tracking and A/B testing with Datanova
200 lines (143 loc) • 4.18 kB
Markdown
Official React SDK for event tracking and A/B testing with Datanova.
This SDK provides React-specific components and hooks that make it easy to integrate Datanova analytics into your React applications.
- 🎯 **Event Tracking Components** - Pre-built components for common tracking scenarios
- 🪝 **React Hooks** - Custom hooks for experiments and tracking
- 📦 **Tree-shakeable** - Import only what you need
- 🎨 **TypeScript Support** - Full TypeScript support with type definitions
- ⚡ **SSR Compatible** - Works with Next.js and other SSR frameworks
```bash
npm install @datanova/react
yarn add @datanova/react
pnpm add @datanova/react
```
```jsx
import { createReactDatanova, DatanovaProvider } from '@datanova/react';
// Create client instance
const datanova = createReactDatanova('YOUR_SDK_KEY');
// Wrap your app with the provider
function App() {
return (
<DatanovaProvider datanova={datanova}>
<YourApp />
</DatanovaProvider>
);
}
```
```jsx
import { TrackClick, TrackPageView, TrackImpression } from '@datanova/react';
function HomePage() {
return (
<>
<TrackPageView eventName="home_page_viewed" />
<TrackImpression name="hero_banner" data={{ variant: 'A' }}>
<div>Your banner content</div>
</TrackImpression>
<TrackClick name="cta_button" data={{ location: 'hero' }}>
<button>Click Me!</button>
</TrackClick>
</>
);
}
```
```jsx
import { useVariant } from '@datanova/react';
function Feature() {
const { data, isLoading } = useVariant({ experimentId: 123 });
if (isLoading) return <div>Loading...</div>;
return <div>{data === 'variant' ? <NewFeature /> : <OldFeature />}</div>;
}
```
Tracks page views automatically when the component mounts.
```jsx
<TrackPageView
eventName="product_page_viewed"
properties={{ productId: '123', category: 'electronics' }}
/>
```
Tracks clicks on child elements.
```jsx
<TrackClick name="add_to_cart" data={{ productId: '123' }}>
<button>Add to Cart</button>
</TrackClick>
```
Tracks when elements become visible using Intersection Observer.
```jsx
<TrackImpression name="product_card" data={{ productId: '123' }} threshold={0.5}>
<ProductCard />
</TrackImpression>
```
Tracks form submissions.
```jsx
<TrackSubmit name="contact_form">
<form>
<input type="email" name="email" />
<button type="submit">Submit</button>
</form>
</TrackSubmit>
```
Tracks changes to form inputs.
```jsx
<TrackChange name="search_input">
<input type="search" placeholder="Search..." />
</TrackChange>
```
Renders different content based on A/B test variants.
```jsx
import { Experiment } from '@datanova/react';
// Basic usage
<Experiment
experimentId={123}
control={<OldVersion />}
variant={<NewVersion />}
/>
// With loading and error states
<Experiment
experimentId={123}
control={<OldCheckout />}
variant={<NewCheckout />}
loading={<CheckoutSkeleton />}
error={<OldCheckout />} // Fallback to control on error
/>
```
Hook to get and track A/B test variants.
```jsx
const { data, isLoading, error } = useVariant({ experimentId: 123 });
```
Hook to access the Datanova client instance.
```jsx
const { trackClick, trackPageView, trackImpression, trackSubmit, trackChange, identify, reset } =
useDatanova();
```
Custom services can be created by implementing the `EventsService` and `ExperimentsService` interfaces.
```jsx
import { createReactDatanova } from '@datanova/react';
import { ConsoleEventsService } from '@datanova/browser';
// Use console logging for development
const datanova = createReactDatanova({
eventsService: new ConsoleEventsService(),
});
```
MIT © [Datanova](https://github.com/d0-datanova)