diff --git a/docs/_config.yml b/docs/_config.yml
index 486c3e2ae9abb..fb4b222498aa9 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,14 +1,14 @@
----
-pygments: true
+---
+markdown: redcarpet
name: React
+redcarpet:
+ extensions:
+ - fenced_code_blocks
react_version: 0.3.0
-exclude:
+pygments: true
+exclude:
- Gemfile
- Gemfile.lock
- README.md
- Rakefile
-redcarpet:
- extensions:
- - fenced_code_blocks
-markdown: redcarpet
baseurl: /react
diff --git a/docs/_includes/nav_docs.html b/docs/_includes/nav_docs.html
index e896ac8e50ff4..d6d9e945a9980 100644
--- a/docs/_includes/nav_docs.html
+++ b/docs/_includes/nav_docs.html
@@ -17,6 +17,7 @@
Reference
Component Lifecycle
Event Handling
Advanced Components
+ Mixins
API
diff --git a/docs/docs/advanced-components.md b/docs/docs/advanced-components.md
index 6a63b8f35b28b..2a07be7274d9d 100644
--- a/docs/docs/advanced-components.md
+++ b/docs/docs/advanced-components.md
@@ -4,7 +4,7 @@ title: Advanced Components
description: How to build advanced composite components.
layout: docs
prev: event-handling.html
-next: api.html
+next: mixins.html
---
Composite components extend a `ReactCompositeComponent` base class that provides
diff --git a/docs/docs/api.md b/docs/docs/api.md
index 8f47b53aea258..fd29070ecbc14 100644
--- a/docs/docs/api.md
+++ b/docs/docs/api.md
@@ -2,7 +2,7 @@
id: docs-api
title: React API
layout: docs
-prev: advanced-components.html
+prev: mixins.html
---
## React
diff --git a/docs/docs/mixins.md b/docs/docs/mixins.md
new file mode 100644
index 0000000000000..65acef6ddfeae
--- /dev/null
+++ b/docs/docs/mixins.md
@@ -0,0 +1,65 @@
+---
+id: docs-mixins
+title: Mixins
+layout: docs
+prev: advanced-components.html
+next: api.html
+---
+
+Mixins allow code to be shared between multiple React components. They are pretty similar to mixins
+in Python or traits in PHP. Let's look at a simple example:
+
+```javascript
+var MyMixin = {
+ getMessage: function() {
+ return 'hello world';
+ }
+};
+
+var MyComponent = React.createClass({
+ mixins: [MyMixin],
+ render: function() {
+ return {this.getMessage()}
;
+ }
+});
+```
+
+A class can use multiple mixins, but no two mixins can define the same method. Two mixins can, however,
+implement the same [lifecycle method](component-lifecycle.html). In this case, each implementation will be invoked one after another.
+
+The only exception is the `shouldComponentUpdate` lifecycle method. This method may only be implemented once
+(either by a mixin or by the component).
+
+```javascript
+var Mixin1 = {
+ componentDidMount: function() {
+ console.log('Mixin1.componentDidMount()');
+ }
+};
+
+var Mixin2 = {
+ componentDidMount: function() {
+ console.log('Mixin2.componentDidMount()');
+ }
+};
+
+
+var MyComponent = React.createClass({
+ mixins: [Mixin1, Mixin2],
+ render: function() {
+ return hello world
;
+ }
+});
+```
+
+When `MyComponent` is mounted into the page, the following text will print to the console:
+
+```
+Mixin1.componentDidMount()
+Mixin2.componentDidMount()
+```
+
+## When should you use mixins?
+
+In general, add a mixin whenever you want a component to share some utility methods, public interface,
+or lifecycle behavior. Often it's appropriate to use them as you would use a superclass in another OOP language.