diff --git a/docs/_config.yml b/docs/_config.yml index 486c3e2ae9..fb4b222498 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 e896ac8e50..b1ae770c6a 100644 --- a/docs/_includes/nav_docs.html +++ b/docs/_includes/nav_docs.html @@ -18,6 +18,7 @@
  • Event Handling
  • Advanced Components
  • API
  • +
  • Mixins
  • diff --git a/docs/docs/api.md b/docs/docs/api.md index 8f47b53aea..5610be2f6b 100644 --- a/docs/docs/api.md +++ b/docs/docs/api.md @@ -3,6 +3,7 @@ id: docs-api title: React API layout: docs prev: advanced-components.html +next: mixins.html --- ## React diff --git a/docs/docs/mixins.md b/docs/docs/mixins.md new file mode 100644 index 0000000000..8302a8e191 --- /dev/null +++ b/docs/docs/mixins.md @@ -0,0 +1,61 @@ +--- +id: docs-mixins +title: Mixins +layout: docs +prev: api.html +next: common-questions.html +--- + +Mixins allow code to be shared between multiple React components. They're pretty similar to mixins in Python or traits in PHP. Let's look at a simple example: + +```javascript +// mixins-simple.js +var MyMixin = { + getMessage: function() { + return 'hello world'; + } +}; + +var MyComponent = React.createClass({ + mixins: [MyMixin], + render: function() { + return
    {this.getMessage()}
    ; + } +}); +``` + +A class can use multiple mixins. Multiple mixins can also override any of the lifecycle methods and they'll be called for each mixin. Here's an example: + +```javascript +// mixins-advanced.js +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 in 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.