# Conflicts: # .github/workflows/check-insights-major-version.yml # .github/workflows/check-posthog-major-version.yml # .github/workflows/ci-security.yaml # .github/workflows/validate-versioning.yml # AGENTS.md # AGENTS.md~upstream_main # packages/ai/src/otel/capture.ts # packages/ai/src/otel/mappers/aiSdk.ts # packages/ai/src/otel/mappers/index.ts # packages/ai/src/otel/types.ts # packages/core/src/__tests__/posthog.init.spec.ts # packages/react-native/src/PostHogProvider.tsx # packages/react/src/context/PostHogContext.ts # packages/react/src/context/PostHogProvider.tsx # tooling/eslint-plugin-insights/no-unsafe-web-global.js
4.4 KiB
@hanzo/react
React components and hooks for Insights analytics integration.
Installation
npm install @hanzo/react @hanzo/insights
Usage
Setting up the Provider
Wrap your application with InsightsProvider to make the Insights client available throughout your app:
import { InsightsProvider } from '@hanzo/react'
function App() {
return (
<InsightsProvider apiKey="<YOUR_PROJECT_API_KEY>" options={{ api_host: 'https://us.i.insights.hanzo.ai' }}>
<YourApp />
</InsightsProvider>
)
}
Or pass an existing Insights client instance:
import insights from '@hanzo/insights'
import { InsightsProvider } from '@hanzo/react'
// Initialize your client
insights.init('<YOUR_PROJECT_API_KEY>', { api_host: 'https://us.i.insights.hanzo.ai' })
function App() {
return (
<InsightsProvider client={insights}>
<YourApp />
</InsightsProvider>
)
}
Hooks
useInsights
Access the Insights client instance to capture events, identify users, etc.
import { useInsights } from '@hanzo/react'
function MyComponent() {
const insights = useInsights()
const handleClick = () => {
insights.capture('button_clicked', { button_name: 'signup' })
}
return <button onClick={handleClick}>Sign Up</button>
}
useFeatureFlagEnabled
Check if a feature flag is enabled for the current user.
import { useFeatureFlagEnabled } from '@hanzo/react'
function MyComponent() {
const isEnabled = useFeatureFlagEnabled('new-feature')
if (isEnabled) {
return <NewFeature />
}
return <OldFeature />
}
By default the hook returns boolean | undefined, where undefined means the flags haven't loaded yet or the flag is absent. Pass a defaultValue to use instead of undefined in those cases — the return type then narrows to boolean:
// false until proven enabled
const isEnabled = useFeatureFlagEnabled('new-feature', false)
useFeatureFlagVariantKey
Get the variant key for a multivariate feature flag.
import { useFeatureFlagVariantKey } from '@hanzo/react'
function MyComponent() {
const variant = useFeatureFlagVariantKey('experiment-flag')
if (variant === 'control') {
return <ControlVariant />
}
if (variant === 'test') {
return <TestVariant />
}
return null
}
useFeatureFlagPayload
Get the payload associated with a feature flag.
import { useFeatureFlagPayload } from '@hanzo/react'
function MyComponent() {
const payload = useFeatureFlagPayload('feature-with-payload')
return <div>Config: {JSON.stringify(payload)}</div>
}
useActiveFeatureFlags
Get all active feature flags for the current user.
import { useActiveFeatureFlags } from '@hanzo/react'
function MyComponent() {
const activeFlags = useActiveFeatureFlags()
return (
<ul>
{activeFlags?.map((flag) => (
<li key={flag}>{flag}</li>
))}
</ul>
)
}
Components
InsightsFeature
A component that renders content based on a feature flag's value. Automatically tracks feature views and interactions.
import { InsightsFeature } from '@hanzo/react'
function MyComponent() {
return (
<InsightsFeature flag="new-cta" fallback={<OldButton />}>
<NewButton />
</InsightsFeature>
)
}
// With variant matching
function MyComponent() {
return (
<InsightsFeature flag="experiment" match="test" fallback={<ControlVersion />}>
<TestVersion />
</InsightsFeature>
)
}
// With payload as render function
function MyComponent() {
return (
<InsightsFeature flag="banner-config">
{(payload) => <Banner title={payload.title} color={payload.color} />}
</InsightsFeature>
)
}
InsightsErrorBoundary
An error boundary that captures React errors and reports them to Insights.
import { InsightsErrorBoundary } from '@hanzo/react'
function App() {
return (
<InsightsProvider apiKey="<YOUR_PROJECT_API_KEY>">
<InsightsErrorBoundary>
<YourApp />
</InsightsErrorBoundary>
</InsightsProvider>
)
}
Please see the main Insights docs.