Skip to main content

React hooks for feature flag evaluation in components

React Hooks

Flaggr provides React hooks for declarative feature flag evaluation in your components.

Setup

Wrap your app with the Flaggr provider:

import { FlaggrProvider } from '@flaggr/client'
 
function App() {
  return (
    <FlaggrProvider
      config={{
        mode: 'remote',
        apiUrl: 'https://flaggr.dev',
        serviceId: 'web-app',
        apiKey: 'flg_your_token',
      }}
    >
      <YourApp />
    </FlaggrProvider>
  )
}

Hook Reference

useBooleanFlag(key, defaultValue)

Returns a boolean flag value. Re-renders when the flag changes.

const isEnabled = useBooleanFlag('feature-x', false)

useStringFlag(key, defaultValue)

Returns a string flag value.

const variant = useStringFlag('checkout-flow', 'classic')

useNumberFlag(key, defaultValue)

Returns a numeric flag value.

const limit = useNumberFlag('rate-limit', 100)

useObjectFlag<T>(key, defaultValue)

Returns a typed object flag value.

interface Config {
  maxRetries: number
  timeout: number
}
 
const config = useObjectFlag<Config>('api-config', {
  maxRetries: 3,
  timeout: 5000,
})

Patterns

Feature Gating

function Dashboard() {
  const showAnalytics = useBooleanFlag('analytics-tab', false)
 
  return (
    <Tabs>
      <Tab label="Overview">...</Tab>
      {showAnalytics && <Tab label="Analytics">...</Tab>}
    </Tabs>
  )
}

A/B Testing

function HeroSection() {
  const variant = useStringFlag('hero-variant', 'A')
 
  switch (variant) {
    case 'A': return <HeroA />
    case 'B': return <HeroB />
    default: return <HeroA />
  }
}

Progressive Rollout

Combine percentage-based targeting in the dashboard with hooks in your code:

function CheckoutPage() {
  const useNewCheckout = useBooleanFlag('new-checkout', false)
 
  // The dashboard controls what percentage of users see this
  return useNewCheckout ? <CheckoutV2 /> : <CheckoutClassic />
}