Simple A/B testing component for React
react-split-testing
Wrap components in <Variant />
and nest in <Experiment />
. A variant is chosen randomly and saved to local storage.
<Experiment name="My Example">
<Variant name="A">
<div>Version A</div>
</Variant>
<Variant name="B">
<div>Version B</div>
</Variant>
</Experiment>
Example
Installation
npm
npm install react-split-testing
yarn
yarn add react-split-testing
Usage
import { Experiment, Variant } from 'react-split-testing'
class App extends Component {
render() {
return (
<Experiment
ref="experiment"
name="My experiment"
onChoice={(experimentName, variantName) => console.log(experimentName, variantName)}
>
<Variant name="A">
<div>Section A</div>
</Variant>
<Variant name="B">
<div>Section B</div>
</Variant>
</Experiment>
)
}
}
Server Rendering
A <Experiment />
with a userIdentifier
property will choose a consistent <Variant />
suitable for server side rendering.
Example
import { Experiment, Variant } from 'react-split-testing'
class App extends Component {
render() {
return (
<Experiment name="My experiment" userIdentifier={this.props.userIdentifier}>
<Variant name="A">
<div>Section A</div>
</Variant>
<Variant name="B">
<div>Section B</div>
</Variant>
</Experiment>
)
}
}
API Reference
<Experiment />
Experiment container component. Children must be of type Variant
.
-
Properties:
name
- Name of the experiment.- Required
- Type:
string
- Example:
"My Example"
userIdentifier
- Distinct user identifier. Useful for server side rendering.- Optional
- Type:
string
- Example:
"lMMaTqA8ODe7c36hhf2N"
variantName
- Name of the variant. When defined, this value is used to choose a variant. This property may be useful for server side rendering.- Optional
- Type:
string
- Example:
"A"
onChoice
- Called when aVariant
has been chosen for yourExperiment
.- Optional
- Type:
function
- Example:
(experimentName, variantName) => { console.log(experimentName, variantName) }
onRawChoice
- Same asonChoice
, but the objects passed are React component instances.- Optional
- Type:
function
- Example:
(experiment, variant) => { console.log(experimentName.getName(), variant.props.name) }
-
Methods:
getName()
- Returns theExperiment
name.getActiveVariant()
- Returns the currently displayedVariant
.getVariant(variantName)
- Returns the instance of the specifiedVariant
name.
<Variant />
Variant container component.
-
Properties:
name
- Name of the variant.- Required
- Type:
string
- Example:
"A"
weight
- The variants will be chosen according to the ratio of the numbers, for example variantsA
,B
,C
with weights1
,2
,2
will be chosen 20%, 40%, and 40% of the time, respectively.- Optional
- Type:
number
- Default:
1
- Example:
2
-
Methods:
getName()
- Returns theVariant
name.getWeight()
- Returns theVariant
weight.