yld-react-6
by Sérgio Ramos
June 10, 2015
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="https://facebook.github.io/react/js/jsfiddle-integration.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
JavaScript 1.7
var BookForm = React.createClass({
propTypes: {
onBook: React.PropTypes.func.isRequired
},
getInitialState: function() {
return {
title: '',
read: false
};
},
changeTitle: function(ev) {
this.setState({
title: ev.target.value
});
},
changeRead: function() {
this.setState({
read: !this.state.read
});
},
addBook: function(ev) {
ev.preventDefault();
this.props.onBook({
title: this.state.title,
read: this.state.read
});
this.setState({
title: '',
read: false
});
},
render: function() {
return (
<form onSubmit={this.addBook}>
<div>
<label htmlFor='title'>Title</label>
<div><input type='text' id='title' value={this.state.title} onChange={this.changeTitle} placeholder='Title' /></div>
</div>
<div>
<label htmlFor='title'>Read</label>
<div><input type='checkbox' id='read' checked={this.state.read} onChange={this.changeRead} /></div>
</div>
<div>
<button type='submit'>Add Book</button>
</div>
</form>
);
}
});
var Books = React.createClass({
propTypes: {
books: React.PropTypes.array
},
getInitialState: function() {
return {
books: (this.props.books || [])
};
},
onBook: function(book) {
this.state.books.push(book);
this.setState({
books: this.state.books
});
},
render: function() {
var books = this.state.books.map(function(book) {
return <Book title={book.title} read={book.read}></Book>;
});
return (
<div>
<BookForm onBook={this.onBook}></BookForm>
<table>
<thead>
<tr>
<th>Title</th>
<th>Read</th>
</tr>
</thead>
<tbody>{books}</tbody>
</table>
</div>
);
}
});
var Book = React.createClass({
propTypes: {
title:...