react-router-pageslider
Version:
React Router PageSlider is implemented with react-router, based on hashHistory. served as mixin of components. Making page slide as route changes.
75 lines (66 loc) • 1.87 kB
JavaScript
import React from 'react';
import ReactDom from 'react-dom';
import { Router, Route, IndexRoute, Link, hashHistory } from 'react-router';
import ReactTransitionGroup from 'react-addons-transition-group';
import ReactRouterPageSlider from './react-router-pageslider';
const PageSlider = ReactRouterPageSlider();
const App = React.createClass({
render() {
return (
<ReactTransitionGroup component="div" className="App">
{
this.props.children && React.cloneElement(this.props.children, {
key: this.props.location.pathname
})
}
</ReactTransitionGroup>
)
}
});
/* remember not to mutate props */
const Page1 = React.createClass({
mixins: [PageSlider],
render() {
return (
// ajacent html tag is not allowed.
<div className="page" id="page1">
<Link className="link" to="/page2">page2</Link>
<Link className="link" to="/page3">page3</Link>
</div>
);
}
});
const Page2 = React.createClass({
mixins: [PageSlider],
render() {
return (
// ajacent html tag is not allowed.
<div className="page" id="page2">
<Link className="link" to="/page1">page1</Link>
<Link className="link" to="/page3">page3</Link>
</div>
);
}
});
const Page3 = React.createClass({
mixins: [PageSlider],
render() {
return (
// ajacent html tag is not allowed.
<div className="page" id="page3">
<Link className="link" to="/page1">page1</Link>
<Link className="link" to="/page2">page2</Link>
</div>
);
}
});
ReactDom.render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Page1}/>
<Route path="/page1" component={Page1} />
<Route path="/page2" component={Page2} />
<Route path="/page3" component={Page3} />
</Route>
</Router>
), document.getElementById('content'));