react-router-component
Version:
Declarative router component for React
69 lines (53 loc) • 1.73 kB
JavaScript
;
/**
* Routing environment.
*
* It specifies how routers read its state from DOM and synchronise it back.
*/
var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
var DummyEnvironment = require('./DummyEnvironment');
var Environment = require('./Environment');
/**
* Mixin for routes to keep attached to an environment.
*
* This mixin assumes the environment is passed via props.
*/
var Mixin = {
componentDidMount: function() {
this.getEnvironment().register(this);
},
componentWillUnmount: function() {
this.getEnvironment().unregister(this);
}
};
var PathnameEnvironment;
var HashEnvironment;
var pathnameEnvironment;
var hashEnvironment;
var defaultEnvironment;
var dummyEnvironment;
if (canUseDOM) {
PathnameEnvironment = require('./PathnameEnvironment');
HashEnvironment = require('./HashEnvironment');
pathnameEnvironment = new PathnameEnvironment();
hashEnvironment = new HashEnvironment();
defaultEnvironment = (window.history !== undefined &&
window.history.pushState !== undefined) ?
pathnameEnvironment :
hashEnvironment;
} else {
dummyEnvironment = new DummyEnvironment();
pathnameEnvironment = dummyEnvironment;
hashEnvironment = dummyEnvironment;
defaultEnvironment = dummyEnvironment;
}
module.exports = {
pathnameEnvironment: pathnameEnvironment,
hashEnvironment: hashEnvironment,
defaultEnvironment: defaultEnvironment,
dummyEnvironment: dummyEnvironment,
Environment: Environment,
PathnameEnvironment: PathnameEnvironment,
HashEnvironment: HashEnvironment,
Mixin: Mixin
};