React Base Fiddle (JSX)

Starting point for creating JSFiddles with React. This uses React with Addons.

by nicholasstephan

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://fb.me/react-with-addons-0.14.0.js"></script>
<script src="https://fb.me/react-dom-0.14.0.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>

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

JavaScript 1.7

const S = 0;
const M = 1;
const L = 2;
const XL = 3;

var FormContainer = React.createClass({
    getInitialState() {
        return {
            size: S,
        };
    },
        render() {
          return (
            <SizePicker
                size={this.state.size}
                onChange={(size)=>this.setState({size:size})}/>
        );
    },
});

var SizePicker = (props) => {
    var snapPoints = {
        [S]: 0,
        [M]: 40,
        [L]: 80,
        [XL]: 120,
    };

    var selectionStyle = Object.assign({}, styles.selection, {left:snapPoints[props.size]});

    return (
          <div style={styles.container}>
            <div style={selectionStyle}/>
            <div style={styles.option} onClick={()=>props.onChange(S)}>S</div>
            <div style={styles.option} onClick={()=>props.onChange(M)}>M</div>
            <div style={styles.option} onClick={()=>props.onChange(L)}>L</div>
            <div style={styles.option} onClick={()=>props.onChange(XL)}>XL</div>
        </div>
    );
};


var styles = {
    container: {
        position: 'relative',
        width: 160,
        height: 40,
    },
    option: {
        display: 'inline-block',
        width: 40,
        height: 40,
        fontFamily: 'sans-serif',
        fontSize: 16,
        lineHeight: '40px',
        textAlign: 'center',
        cursor: 'pointer',
    },
    selection: {
        position: 'absolute',
        top: 0,
        left: 0,
        WebkitTransition: 'left 0.2s ease-in-out',
        width: 40,
        height: 40,
        backgroundColor: 'lightBlue',
        zIndex: -1,
    },
};

ReactDOM.render(
    <FormContainer/>, document.getElementById('container')
);