Stripe Elements <> React

by Michelle Bu

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://npmcdn.com/react@latest/dist/react-with-addons.js"></script>
<script src="https://npmcdn.com/react-dom@latest/dist/react-dom.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<script src="https://js.stripe.com/v3/"></script>


<div id="checkout">
  <!-- This element's contents will be replaced with your component. -->
</div>

JavaScript 1.7

class Checkout extends React.Component {
  constructor(props) {
  	super(props);
    this.state = {};
  }
  componentDidMount() {
  	this._cardField = this.props.elements.create('card');
    this._cardField.mount('#card-field');
  }
  handleSubmit(ev) {
  	ev.preventDefault();
    this.props.stripe.createToken(this._cardField).then(({token}) => this.setState({token}));
  }
  render() {
  	return (
    	<div>
        <form onSubmit={this.handleSubmit.bind(this)}>
          <label htmlFor="card-field">Card details</label>
          <div id="card-field" />
          <button>Pay</button>
        </form>
        <div>
        	{this.state.token && `Token: ${this.state.token.id}`}
        </div>
      </div>
    );
  }
}

const stripe = Stripe('pk_RXwtgk4Z5VR82S94vtwmam6P8qMXQ');
const elements = stripe.elements();
ReactDOM.render(<Checkout stripe={stripe} elements={elements} />, document.getElementById('checkout'));