React router example

by kahnaar

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/JSXTransformer.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react-with-addons.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/react-router/0.11.6/react-router.min.js"></script>
<div id="app"></div>

Babel + JSX

var Router = ReactRouter;
var Route = Router.Route, 
		DefaultRoute = Router.DefaultRoute,
  	Link=Router.Link, 
    RouteHandler = Router.RouteHandler;

var App = React.createClass({
  mixins: [Router.State],
  componentDidMount: function() {
  },
  render: function() {
    var name = this.getRoutes().reverse()[0].name;

    return (
      <div>
        <ul>
            <li><Link to="view1">View1 link</Link></li>    
            <li><Link to="view2">View2 link</Link></li>    
        </ul>
        <RouteHandler key={name}/>
      </div>
    );
  }
});
          
var View1 = React.createClass({
    componentWillLeave: function(cb) {
      console.log('View1 will leave');
      setTimeout(cb, 1);
    },
    componentDidMount: function(cb) {
      console.log('View1 will open');
    },
    render: function() {
        return (
          <div>View 1 content</div>
        );
    }          
});
          
var View2 = React.createClass({
    componentWillLeave: function(cb) {
      console.log('View2 will leave');
      setTimeout(cb, 1);
    },
    componentDidMount: function(cb) {
      console.log('View2 will open');
    },
    render: function() {
        return (
          <div>View 2 content</div>
        );
    }          
});
    
var routes = (
  <Route name="app" path="/" handler={App}>
    <Route name="view1" handler={View1}/>
    <Route name="view2" handler={View2}/>
  </Route>
);

Router.run(routes, function (Handler) {
  React.render(<Handler/>, document.getElementById('app'));
});