Pushtell A/B Testing React Component, Multi-Component Example
by pushtell
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://fb.me/react-with-addons-0.14.0.min.js"></script>
<script src="https://fb.me/react-dom-0.14.0.min.js"></script>
<script src="https://rawgit.com/pushtell/react-ab-test/master/standalone.min.js"></script>
<!-- Bootstrap Boilerplate -->
<div class="container">
<div class="row">
<div class="col-xs-12">
<div id="react"></div>
</div>
</div>
</div>
Babel + JSX
// A/B Testing React Component, Multi-Component Example
// var Experiment = require("react-ab-test/lib/Experiment");
// var Variant = require("react-ab-test/lib/Variant");
// var emitter = require("react-ab-test/lib/emitter");
// Experiment, Variant, and emitter are defined
// in https://rawgit.com/pushtell/react-ab-test/master/standalone.min.js
// for JSFiddle testing purposes.
// Define variants in advance.
emitter.defineVariants("example-pcutps9q", ["A", "B", "C"]);
var Component1 = React.createClass({
render: function(){
return <Experiment name="example-pcutps9q">
<Variant name="A">
<h1>Headline A</h1>
</Variant>
<Variant name="B">
<h1>Headline B</h1>
</Variant>
</Experiment>;
}
});
var Component2 = React.createClass({
render: function(){
return <Experiment name="example-pcutps9q">
<Variant name="A">
<p>Section A</p>
</Variant>
<Variant name="B">
<p>Section B</p>
</Variant>
<Variant name="C">
<p>Section C</p>
</Variant>
</Experiment>;
}
});
var Component3 = React.createClass({
onButtonClick: function(e){
emitter.emitWin("example-pcutps9q");
},
render: function(){
return <button onClick={this.onButtonClick} className="btn btn-primary">Emit a win</button>;
}
});
var App = React.createClass({
render: function(){
return <div>
<Component1 />
<Component2 />
<Component3 />
</div>;
}
});
// Called when the experiment is displayed to the user.
emitter.addPlayListener(function(experimentName, variantName){
console.log("Displaying experiment ‘" + experimentName + "’ variant ‘" + variantName + "’");
});
// Called when a 'win' is emitted, in this case by emitter.emitWin()
emitter.addWinListener(function(experimentName, variantName){
console.log("Variant ‘" + variantName + "’ of experiment ‘" + experimentName + "’ was clicked");
});
ReactDOM.render(<App />, document.getElementById('react'));