---
title: Real-Time Audiences for Feature Experimentation segment qualification methods for the React Native SDK
slug: feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-for-the-react-native-sdk
docTags: 
createdAt: 2026-08-05T20:39:52.000Z
---

## Prerequisites

You must enable and configure [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8) before using audience segment features.

## Automatic segment fetching

When you enable ODP by passing `createOdpManager()` to `createInstance`, the React Native SDK **automatically fetches qualified segments** for the user when the `<OptimizelyProvider>` creates the user context. You do not need to manually call `fetchQualifiedSegments` in your components — the decide hooks (`useDecide`, etc.) already have access to the fetched segments when making decisions.

```javascript
import {
  createInstance,
  createPollingProjectConfigManager,
  createBatchEventProcessor,
  createOdpManager,
  OptimizelyProvider,
  useDecide,
} from '@optimizely/react-sdk';

const optimizely = createInstance({
  projectConfigManager: createPollingProjectConfigManager({
    sdkKey: 'YOUR_SDK_KEY',
  }),
  eventProcessor: createBatchEventProcessor(),
  odpManager: createOdpManager(),
});

function App() {
  return (
    <OptimizelyProvider client={optimizely} user={{ id: 'user-123' }}>
      <MyComponent />
    </OptimizelyProvider>
  );
}

function MyComponent() {
  // Segments are already fetched automatically — decisions use them
  const { decision, isLoading, error } = useDecide('my-flag');

  if (isLoading) return <Text>Loading...</Text>;
  if (error) return <Text>Error: {error.message}</Text>;

  return <Text>{decision.enabled ? 'Feature on' : 'Feature off'}</Text>;
}
```

### Checking segment qualification

If you need to check whether the user is qualified for a specific segment (for example, for analytics or conditional rendering), use `isQualifiedFor()` on the user context:

```javascript
import { useOptimizelyUserContext } from '@optimizely/react-sdk';

function SegmentDebug() {
  const { userContext, isLoading } = useOptimizelyUserContext();

  if (isLoading || !userContext) return null;

  const isQualified = userContext.isQualifiedFor('segment1');

  return <Text>Is qualified for segment1: {isQualified ? 'Yes' : 'No'}</Text>;
}
```

### Segment caching

Fetched segments are cached in memory. The cache is configured when creating the ODP manager:

- **Cache size** — Default: 100. Set to 0 to disable caching.
- **Cache timeout** — Default: 600,000 milliseconds (10 minutes). Set to 0 to disable timeout (never expires).

```javascript
const odpManager = createOdpManager({
  segmentsCacheSize: 100,
  segmentsCacheTimeout: 600000, // 10 minutes in milliseconds
});
```

The cache uses the least recently used (LRU) algorithm, so the oldest record is evicted when the maximum size is reached.

## fetchQualifiedSegments

For advanced use cases where you need to manually fetch segments (for example, outside of a React component tree), you can create a user context directly on the client and fetch segments before making decisions:

```javascript
import {
  createInstance,
  createPollingProjectConfigManager,
  createBatchEventProcessor,
  createOdpManager,
} from '@optimizely/react-sdk';

const optimizely = createInstance({
  projectConfigManager: createPollingProjectConfigManager({
    sdkKey: 'YOUR_SDK_KEY',
  }),
  eventProcessor: createBatchEventProcessor(),
  odpManager: createOdpManager(),
});

async function fetchAndDecide() {
  await optimizely.onReady();

  const userContext = optimizely.createUserContext('user-123');
  await userContext.fetchQualifiedSegments();

  const decision = userContext.decide('my-flag');
  return decision;
}
```

### Parameters

| Parameter            | Type                        | Description                                                |
| -------------------- | --------------------------- | ---------------------------------------------------------- |
| `options` (optional) | `OptimizelySegmentOption[]` | A set of options for fetching qualified segments from ODP. |

### Returns

`Promise<boolean>` — resolves with `true` if segments are fetched successfully, `false` otherwise.

### Cache bypass options

- `OptimizelySegmentOption.IGNORE_CACHE` — Bypass segments cache for lookup and save.
- `OptimizelySegmentOption.RESET_CACHE` — Reset all segments cache.

## isQualifiedFor

Checks if the user is qualified for the given audience segment.

### Parameters

| Parameter | Type   | Description                             |
| --------- | ------ | --------------------------------------- |
| `segment` | string | The ODP audience segment name to check. |

### Returns

`true` if the user is qualified, otherwise `false`.

## Source files

The language and platform source files containing the implementation for the React Native SDK are available on [GitHub](https://github.com/optimizely/react-sdk/blob/master/src/client.ts).
