Pushtell A/B Testing React Component, Single 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, Single 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.

var App = React.createClass({
  onButtonClick: function(e){
    this.refs.experiment.win();
  },
  render: function(){
    return <div>
      <Experiment ref="experiment" name="example-m14qvy7r">
        <Variant name="A">
          <h1>Headline A</h1>
        </Variant>
        <Variant name="B">
          <h1>Headline B</h1>
        </Variant>
      </Experiment>
      <button onClick={this.onButtonClick} className="btn btn-primary">Emit a win</button>
    </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 this.refs.experiment.win()
emitter.addWinListener(function(experimentName, variantName){
  console.log("Variant ‘" + variantName + "’ of experiment ‘" + experimentName + "’  was clicked");
});

ReactDOM.render(<App />, document.getElementById('react'));