---
title: React.js
layout: default
---
### Basic class
```js
React.createClass({
render: function () {
return (
Hello {this.props.name}
);
}
});
```
### Using components
```js
var Component = React.createClass({ ... });
var compo = React.render(, mountnode);
```
### States
```js
this.setState({ editing: true });
this.state.editing === true
this.replaceState({ ... });
```
### Properties
```js
this.setProps({ fullscreen: true });
this.props.fullscreen === true
this.replaceProps({ ... });
```
### [API](http://facebook.github.io/react/docs/component-api.html)
```js
c.getDOMNode()
c.forceUpdate()
c.isMounted()
```
### [Methods](http://facebook.github.io/react/docs/component-specs.html)
```js
{
render: function()
getInitialState: function()
getDefaultProps: function()
mixins: []
propTypes: {} /* for validation */
statics: { .. } /* static methods */
displayName: '..' /* automatically filled in by jsx */
}
```
### [Lifecycle](http://facebook.github.io/react/docs/component-specs.html)
```js
componentWillMount()
componentDidMount()
// not on initial render
componentWillReceiveProps(props)
shouldComponentUpdate(props, state)
componentWillUpdate(props, state)
componentDidUpdate(prevProps, prevState)
componentWillUnmount()
// ...there is no DidUnmount or ReceiveState.
```
### Initial states
React.createClass({
getInitialState: function () {
return {data: []};
},
render: function () {
return (
);
}
});
### Default properties
React.createClass({
getDefaultProps: function () {
return {name: ''};
}
);
### Before rendering
React.createClass({
componentWillMount: function () {
$.get(this.props.url, function (data) {
this.setState(data);
});
},
render: function () {
return (
);
}
});
### Actions
React.createClass({
handleSubmit: function (event) {
name = this.refs['name'].getDOMNode().value;
// see two-way binding below
}
})
### [Two-way binding](http://facebook.github.io/react/docs/two-way-binding-helpers.html)
```js
React.createClass({
mixins: [React.addons.LinkedStateMixin],
getInitialState: function() {
return {value: 'Hello!'};
},
render: function() {
return ;
}
});
// LinkedStateMixin adds a method to your React component called
// linkState().
```
### Lists
var TodoList = React.createClass({
render: function() {
var createItem = function(itemText) {
return {itemText};
};
return {this.props.items.map(createItem)}
;
}
});
### [Property validation](http://facebook.github.io/react/docs/reusable-components.html#prop-validation)
```js
React.createClass({
propTypes: {
// required
requiredFunc: React.PropTypes.func.isRequired,
requiredAny: React.PropTypes.any.isRequired,
// primitives, optional by default
bool: React.PropTypes.bool,
func: React.PropTypes.func,
number: React.PropTypes.number,
string: React.PropTypes.string,
}
});
Also:
```js
propTypes: {
message: React.PropTypes.instanceOf(Message), // instanceof any Class
element: React.PropTypes.element, // A React element
enum: React.PropTypes.oneOf(['News', 'Photos']),
node: React.PropTypes.node, // num, string, element, or array of these
// any of below
union: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number
]),
// arrays
array: React.PropTypes.array,
arrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
// objects
object: React.PropTypes.object,
objectOf: React.PropTypes.objectOf(React.PropTypes.number),
// An object taking on a particular shape
object2: React.PropTypes.shape({
color: React.PropTypes.string,
fontSize: React.PropTypes.number
}),
// custom validator
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error('Validation failed!');
}
}
}
```
### [Class set](http://facebook.github.io/react/docs/class-name-manipulation.html)
render: function() {
var cx = React.addons.classSet;
var classes = cx({
'message': true,
'message-important': this.props.isImportant,
'message-read': this.props.isRead
});
// same final string, but much cleaner
return Great Scott!
;
}
### [Propagating properties to children](http://facebook.github.io/react/docs/transferring-props.html)
var VideoPlayer = React.createClass({
render: function() {
return ;
}
});
### Mixins
var TickTock = React.createClass({
mixins: [SetIntervalMixin]
}
SetIntervalMixin = {
componentWillMount: function() { .. }
}
----
### See also
* [Animations](http://facebook.github.io/react/docs/animation.html)