React Survey App - state at top level
React Survey App. State now moved to the top most level.
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/JSXTransformer.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.js"></script>
<script src="//fb.me/react-js-fiddle-integration.js"></script>
<h3>Survey App</h3>
<div id="main"></div>
CSS
label {
display: block
}
.inputFieldWrapper {
margin: 0 5px 35px 5px;
border: 1px solid lightgray;
padding: 10px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.inputFieldWrapper p {
margin: 0 0 4px 0;
}
.inputFieldWrapper input {
margin-right: 5px;
}
Babel + JSX
var CheckboxInput = React.createClass({
render: function () {
return (
<label>
<input type="checkbox"
name={this.props.name}
checked={this.props.checked}
onClick={this.handleChange}
value={this.props.value} />
{this.props.label}
</label>
);
},
handleChange: function(e) {
// Just a little preprocessing before passing upwards
this.props.handleChange(this.props.index, e.target.checked);
}
});
var CheckboxInputField = React.createClass({
render: function() {
var name = this.props.question.name;
var that = this;
var x = -1;
var mappedInputElements = this.props.question.values.map(function(data, key) {
x++;
return (
<CheckboxInput
name={name}
label={data.label}
index={x}
key={data.value}
value={data.value}
handleChange={that.handleFieldChange} />
);
});
return (
<div className="inputFieldWrapper">
<p>{this.props.question.blurb}</p>
{mappedInputElements}
</div>
);
},
handleFieldChange: function(elementIndex, elementChecked) {
// A little more pre-processing, then pass the data upwards again
this.props.handleFieldChange(this.props.index, elementIndex, elementChecked);
}
});
var CheckboxInputFields = React.createClass({
render: function() {
var that = this;
var x = -1;
var mappedInputFields = this.props.questions.map(function(question, key) {
x++;
return (
<CheckboxInputField
question={question}
index={x}
key = {question.name}
handleFieldChange={that.props.handleFieldChange} />
);
});
return (
...