/**
* This example shows using Morearty and React Router together in a single app.
*
* Both libraries expect to be the 'top-level-item' by default, which causes conflict.
* The `currentRoute` here is especially important, as this allows the components to re-render
* when the Route changes. Without this the `shouldComponentUpdate` of Morearty will
* return `false`, preventing routing.
*
* Morearty - https://github.com/moreartyjs/moreartyjs
* React Router - https://github.com/rackt/react-router
*/
var React = require('react');
var Router = require('react-router');
var Route = Router.Route;
var Link = Router.Link;
var DefaultRoute = Router.DefaultRoute;
var RouteHandler = Router.RouteHandler;
var Morearty = require('morearty');
var state = {
initialState: {
'name': 'FooBar',
'foo': 'Foo',
'bar': 'Bar',
'baz': 'Baz'
}
};
var Ctx = Morearty.createContext(state);
var Home = React.createClass({
mixins: [Morearty.Mixin],
render: function() {
var binding = this.getDefaultBinding();
return (
- {binding.get('name')} -
Foo
Bar
Baz
);
}
});
var NestedRouteComponent = React.createClass({
mixins: [Morearty.Mixin],
render: function() {
var binding = this.getDefaultBinding();
var metaBinding = binding.meta();
return (
Path: {metaBinding.get('currentPath')}
);
}
});
var Foo = React.createClass({
mixins: [Morearty.Mixin],
render: function() {
var binding = this.getDefaultBinding();
return
Foo {binding.get('foo')}!
;
}
});
var Bar = React.createClass({
mixins: [Morearty.Mixin],
render: function() {
var binding = this.getDefaultBinding();
return
Bar {binding.get('bar')}!
;
}
});
var Baz = React.createClass({
mixins: [Morearty.Mixin],
render: function() {
var binding = this.getDefaultBinding();
return
Baz {binding.get('baz')}!
;
}
});
var routes = (
);
var App = React.createClass({
mixins: [Morearty.Mixin],
componentWillMount: function() {
var binding = this.getDefaultBinding();
var metaBinding = binding.meta();
Router.run(routes, function(Handler, state) {
metaBinding.set('Handler', Handler);
metaBinding.set('currentPath', state.path);
});
},
render: function() {
var binding = this.getDefaultBinding();
var metaBinding = binding.meta();
var Handler = metaBinding.get('Handler');
return Handler ? : null;
}
});
var Bootstrap = Ctx.bootstrap(App);
React.render(, document.getElementById('root'));