abex-react v1.1.6
abex-react
abex-react is a React package that provides components and utilities for handling A/B testing experiments using the Abex platform. It allows you to define and render different content based on assigned variant keys. The package includes the following modules:
Installation
To install abex-react, you can use npm or yarn:
npm install abex-reactor
yarn add abex-reactAbexProvider
The AbexProvider component is used to wrap your application and provide access to the variant keys for experiments. It serves as the context provider for the child components that rely on A/B testing experiments. The AbexProvider component accepts the following props:
| Prop | Type | Required | Description |
|---|---|---|---|
| product | string | Yes | The product or module within your application. |
| screen | string | Yes | The screen or page within the specified product. |
| component | string | Yes | The specific component within the given screen. |
| experimentData | object | Yes | An object containing experiment data |
| onInit | function | No | An optional callback function called after the AbexClient instance is created. |
| children | ReactNode | Yes | The child components to be wrapped by the AbexProvider. |
Examples
- Basic Usage:
import React from 'react';
import { AbexProvider } from 'abex-react';
const App = () => {
return (
<AbexProvider
product="product1"
screen="screen1"
component="component1"
experimentData={{
utm_source: 'scaler',
}}
>
{/* Your application components */}
</AbexProvider>
);
};- With
onInitCallback:
import React from 'react';
import { AbexProvider } from 'abex-react';
const onProviderInit = (client) => {
console.log('AbexClient instance created:', client);
// Perform initialization or other tasks with the client
};
const App = () => {
return (
<AbexProvider
product="product1"
screen="screen1"
component="component1"
experimentData={{
utm_source: 'scaler',
}}
onInit={onProviderInit}
>
{/* Your application components */}
</AbexProvider>
);
};In the examples above, we demonstrate the usage of the AbexProvider component. In the first example, we provide an array of experiments to the experiments prop, and in the second example, we also specify an onInit callback function that will be called after the AbexClient instance is created. The AbexProvider component wraps your application components, making the variant keys available through the AbexContext for child components to access and render different content based on the assigned variant keys.
Identifying the User with abexClient.identify
To identify the user and associate a user ID with the AbexClient instance, you can use the abexClient.identify(userID) method. This allows you to retrieve the user ID and use it as a token for A/B testing experiments.
Here's an example of how to use abexClient.identify in conjunction with AbexProvider:
import React from 'react';
import { AbexProvider } from 'abex-react';
import AbexClient from '../utils/abexClient';
const experimentsData = {
utmSource: 'scaler_event',
}
const onProviderInit = (client) => {
console.log('AbexClient instance created:', client);
// Perform initialization or other tasks with the client
client.identify('user123'); // Identify the user with a user ID
};
const App = () => {
return (
<AbexProvider
product="exampleProduct"
screen="exampleScreen"
component="exampleComponent"
experimentData={experimentsData}
onInit={onProviderInit}
>
{/* Your application components */}
</AbexProvider>
);
};In this example, we define an onProviderInit callback function, which is called after the AbexClient instance is created. Inside this callback, we have access to the AbexClient instance, and we use the identify method to associate the user with the ID 'user123'. By identifying the user, the AbexClient instance will use the user ID as a token when retrieving variant keys for experiments.
Note: Make sure to adapt the example to your specific use case and replace 'user123' with the appropriate user ID.
By combining the abexClient.identify method with AbexProvider, you can effectively identify the user and leverage the assigned variant keys in your A/B testing experiments.
ExperimentsProvider
The ExperimentsProvider component is an integral part of the abex-react package, used in conjunction with the AbexProvider to efficiently cache and manage experiment data throughout your application. It forms the foundation for optimizing the distribution of experiment information, leading to improved performance and consistency in your A/B testing implementation.
Usage
The ExperimentsProvider component is internally employed within the AbexProvider, and its implementation is abstracted away from the direct usage of developers. It plays a crucial role in caching and distributing experiment data, ensuring that your application efficiently utilizes A/B testing experiments without causing unnecessary network requests.
How It Works
The ExperimentsProvider is used as a caching mechanism within the AbexProvider component. Here's how it works:
Initialization: When the
AbexProvideris initialized with experiment data, it creates an instance of theExperimentsProvider.Caching: The
ExperimentsProviderstores experiment data in its internal state, caching it for subsequent use. This prevents the need for repeated fetching of experiment data from the Abex platform.Distribution: As child components of the
AbexProviderare rendered, they can access the cached experiment data from theExperimentsProvidercontext. This eliminates the need for each component to fetch experiment data individually.Optimized Performance: By centralizing the storage and distribution of experiment data, the
ExperimentsProviderensures that components within theAbexProviderscope can access cached data efficiently, resulting in optimized rendering and responsiveness.
Example
The ExperimentsProvider is used within the AbexProvider to manage experiment data. Here's an example of how the AbexProvider integrates the ExperimentsProvider:
import React from 'react';
import { AbexProvider, ExperimentsProvider } from 'abex-react'; // Import both components
const App = () => {
const experimentsData = {
utmSource: 'scaler_event',
}
return (
<ExperimentsProvider>
{' '}
{/* Use ExperimentsProvider at the root */}
<AbexProvider
product="exampleProduct"
screen="exampleScreen"
component="exampleComponent"
experimentData={experimentsData}
>
{/* Your application components */}
</AbexProvider>
</ExperimentsProvider>
);
};
export default App;In this example, the ExperimentsProvider is used internally within the AbexProvider. The AbexProvider wraps your application components and effectively utilizes the caching capabilities of the ExperimentsProvider.
Benefits
The ExperimentsProvider brings several benefits to your abex-react implementation:
Efficient Data Sharing: Experiment data is efficiently shared across components within the
AbexProviderscope, eliminating the need for redundant network requests.Optimized Performance: Caching experiment data leads to faster rendering and better user experience, as components can access the data without delay.
Consistency: All components within the
AbexProviderreceive the same consistent experiment data, ensuring uniformity.Simplified Implementation: You don't need to manually manage experiment data distribution; the
ExperimentsProviderhandles it for you.
In summary, the ExperimentsProvider within the abex-react package efficiently manages and caches experiment data, enhancing the performance and consistency of your A/B testing implementation. It collaborates seamlessly with the AbexProvider to optimize the distribution of experiment information within your application.
AbexCase
The AbexCase component is used within the AbexSwitch component to define different cases or variants based on the assigned variant key. It allows rendering different content based on the variant assigned to the user.
Usage
<AbexCase variant={variantName}>
{/* Content for the specified variant */}
</AbexCase>Props
| Prop | Type | Required | Description |
|---|---|---|---|
| variant | string | Yes | The variant key that defines which content to render. |
| children | ReactNode | Yes | The content to be rendered when the variant matches. It can be any valid React element or JSX. |
Example
import { AbexCase } from 'abex-react';
const MyComponent = () => {
const variant = 'variant1';
return (
<AbexCase variant={variant}>
<h1>Welcome to Variant 1</h1>
<p>This is the content for variant 1.</p>
</AbexCase>
);
};In the example above, we define an AbexCase component with the variant prop set to 'variant1'. When the assigned variant key matches 'variant1', the content within the AbexCase component will be rendered. In this case, it renders a heading and a paragraph specific to variant 1.
Use the AbexCase component within an AbexSwitch component to handle different cases or variants based on the assigned variant key in your A/B testing implementation.
AbexSwitch
The AbexSwitch component is a higher-level React component that conditionally renders content based on the assigned variant key of an A/B testing experiment. It leverages the AbexContext to retrieve variant keys and render appropriate cases.
Props
| Prop | Type | Required | Description |
|---|---|---|---|
| experimentKey | string | Yes | The experiment key to identify the experiment. |
| defaultVariant | string | Yes | The default variant to render while loading or when experiment key is undefined. |
| children | ReactNode | Yes | The AbexCase components representing different variants. |
| customLoader | ReactNode | No | Custom loader to render while the variant key is being fetched. |
| loaderProps | object | No | Additional props to pass to the custom loader (customLoader). |
Examples
Basic Usage (Without Custom Loader)
import React from 'react';
import { AbexSwitch, AbexCase } from 'abex-react';
const MyComponent = () => {
const experimentKey = 'experiment1';
const defaultVariant = 'defaultVariant';
return (
<AbexSwitch experimentKey={experimentKey} defaultVariant={defaultVariant}>
<AbexCase variant="variant1">
<h1>Welcome to Variant 1</h1>
<p>This is the content for Variant 1.</p>
</AbexCase>
<AbexCase variant="variant2">
<h1>Welcome to Variant 2</h1>
<p>This is the content for Variant 2.</p>
</AbexCase>
<AbexCase variant="defaultVariant">
<h1>Loading Default Variant...</h1>
</AbexCase>
</AbexSwitch>
);
};Usage with Custom Loader
import React from 'react';
import { AbexSwitch, AbexCase } from 'abex-react';
const MyComponent = () => {
const experimentKey = 'experiment1';
const defaultVariant = 'defaultVariant';
const CustomLoader = () => (
<div className="custom-loader">
<h1>Loading...</h1>
{/* Add your custom loader UI here */}
</div>
);
return (
<AbexSwitch
experimentKey={experimentKey}
defaultVariant={defaultVariant}
customLoader={<CustomLoader />}
>
<AbexCase variant="variant1">
<h1>Welcome to Variant 1</h1>
<p>This is the content for Variant 1.</p>
</AbexCase>
{/* ... other AbexCase components ... */}
</AbexSwitch>
);
};Usage with Loader Props
import React from 'react';
import { AbexSwitch, AbexCase } from 'abex-react';
const MyComponent = () => {
const experimentKey = 'experiment1';
const defaultVariant = 'defaultVariant';
const CustomLoader = ({ loaderText }) => (
<div className="custom-loader">
<h1>{loaderText}</h1>
{/* Add your custom loader UI here */}
</div>
);
return (
<AbexSwitch
experimentKey={experimentKey}
defaultVariant={defaultVariant}
customLoader={<CustomLoader loaderText="Loading Experiment..." />}
loaderProps={{ loaderText: 'Loading Content...' }}
>
<AbexCase variant="variant1">
<h1>Welcome to Variant 1</h1>
<p>This is the content for Variant 1.</p>
</AbexCase>
{/* ... other AbexCase components ... */}
</AbexSwitch>
);
};In the example above, the loaderProps prop is used to pass additional props to the custom loader component. This can be useful for customizing the loader's behavior or appearance based on specific needs.
abexClient
The abexClient is a utility class provided by the abex-react package that interacts with the Abex platform APIs and handles A/B testing experiments. It allows you to fetch variant keys for experiments and identify users with a user ID. Here is the documentation for the abexClient class and its available methods:
Constructor
The abexClient constructor creates an instance of the AbexClient class.
const abexClient = new AbexClient(experiments: { experimentKey: string; experimentData: object; }[], callback?: (client: AbexClient) => void)| Parameter | Type | Description |
|---|---|---|
| experiments | Array of objects: { experimentKey: string; experimentData: object; } | An array of experiments with their keys and data. |
| callback | Function | An optional callback function called after the AbexClient instance is created. |
Examples
import AbexClient from 'abexClient';
const product = 'scaler';
const screen = 'events';
const component = 'reg_form';
const experimentsData = {
utmSource: 'scaler_event',
}
const onClientInit = (client) => {
console.log('AbexClient instance created:', client);
// Perform initialization or other tasks with the client
};
const abexClient = new AbexClient(
product,
screen,
component,
experimentsData,
onClientInit
);In the example above, we create an instance of the AbexClient class with an array of experiments and an onClientInit callback function. The onClientInit function will be called after the AbexClient instance is created, allowing you to perform any necessary initialization or tasks with the client.
Methods
identify
The identify method is used to associate a user with a user ID in the AbexClient instance.
abexClient.identify(userID: string): void| Parameter | Type | Description |
|---|---|---|
| userID | string | The user ID to be associated. |
Example
const userID = 'user123';
abexClient.identify(userID);In the example above, we use the identify method to associate the user with the ID 'user123'. This allows the AbexClient instance to use the user ID as a token when fetching variant keys for experiments.
getVariantKey
The getVariantKey method retrieves the variant key for each experiment in the AbexClient instance.
abexClient.getVariantKey(): Promise<Record<string, string | null>>Example
abexClient.getVariantKey().then((variantKeys) => {
console.log('Variant Keys:', variantKeys);
// Use the variant keys for rendering different content based on experiments
});In the example above, we use the getVariantKey method to fetch the variant keys for experiments. The method returns a promise that resolves to an object containing experiment keys and their corresponding variant keys. You can then use the variant keys to render different content based on the assigned variants.
getVariantsInBatch
The getVariantsInBatch method retrieves the variant keys for experiments in batch.
abexClient.getVariantsInBatch(): Promise<Record<string, string | null>>Example
abexClient.getVariantsInBatch().then((variantKeys) => {
console.log('Variant Keys:', variantKeys);
// Use the variant keys for rendering different content based on experiments
});In the example above, we use the getVariantsInBatch method to fetch the variant keys for experiments in a batch. The method returns a promise that resolves to an object containing experiment keys and their corresponding variant keys. You can then use the variant keys to render different content based on the assigned variants.
useAbex
The useAbex hook provides a simple way to access the variant key for a particular experiment within a component. It takes an experiment key as an argument and returns the variant key associated with that experiment. Example usage:
import React from 'react';
import { useAbex } from 'abex-react';
const MyComponent = () => {
const variantKey = useAbex('experiment1');
return <div>{/* Use the variant key in your component */}</div>;
};2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago