The component supplied to a route is called a "Route Handler". They are rendered when their route is active. There are some special props and static methods available to these components.
Render the active nested route handler with this property, passing in additional properties as needed. This is the mechanism by which you get effortless nested UI.
var App = React.createClass({
render: function() {
<div>
<h1>Address Book</h1>
{/* the active child route handler will be rendered here */}
{/* you can "trickle down" props to the active child */}
<this.props.activeRouteHandler someProp="foo" />
</div>
}
});
var Contact = React.createClass({
render: function() {
return <h1>{this.props.params.id}</h1>
}
});
var routes = (
<Routes>
<Route handler={App}>
<Route name="contact" path="/contact/:id" handler={Contact}>
</Route>
</Routes>
);
React.renderComponent(routes, document.body);
When a route has dynamic segments like <Route path="users/:userId"/>
,
the dynamic values from the url are available at
this.props.params.userId
, etc.
The query parameters from the url.
You can define static methods on your route handlers that will be called during route transitions.
Called when a route is about to render, giving you the opportunity to abort or redirect the transition. You can return a promise and the whole route hierarchy will wait for the promises to resolve before proceeding.
See also: transition
Called when an active route is being transitioned out giving you an
opportunity to abort the transition. The component
is the current
component, you'll probably need it to check its state to decide if you
want to allow the transition.
See also: transition
var Settings = React.createClass({
statics: {
willTransitionTo: function(transition, params) {
return auth.isLoggedIn().then(function(loggedIn) {
if (!loggedIn)
return;
transition.abort();
return auth.logIn({transition: transition});
// in auth module call `transition.retry()` after being logged in
});
},
willTransitionFrom: function(transition, component) {
if (component.formHasUnsavedData())) {
if (!confirm('You have unsaved information, are you sure you want to leave this page?')) {
transition.abort();
}
}
}
}
//...
});