I'm learning React myself with online tutorial.
So this is a basic example about using React Router:
<Router history={browserHistory}> <Route path="/" component={App}> <IndexRoute component={Home}/> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> <Route path="/contact" component={Contact}/> </Route> </Router>
With my App component:
class App extends React.Component { render() { return ( <div> <ul> <li><Link to="home">Home</Link></li> <li><Link to="about">About</Link></li> <li><Link to="contact">Contact</Link></li> </ul> {this.props.children} </div> ) } } export default App;
However, I have problem when using IndexRoute because it shows nothing, so I search for the module of react-router-dom v4 on npm and there is no IndexRoute inside. Instead it uses this:
<Router> <div> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About</Link></li> <li><Link to="/contact">Contact</Link></li> </ul> <hr/> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/contact" component={Contact}/> </div> </Router>
So how can I render 2 component for 1 path ?
UPDATE react-router-4
has changed in that it no longer has children. However, with the Route
component you can render anything that matches the path.
<Router> <div> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About</Link></li> <li><Link to="/contact">Contact</Link></li> </ul> <hr/> // All 3 components below would be rendered when in a homepage <Route exact path="/" component={Home}/> <Route exact path="/" component={About}/> <Route exact path="/" component={Contact}/> <Route path="/about" component={About}/> <Route path="/contact" component={Contact}/> </div> </Router>
This means that if you want a wrapper, you can write it inside the component.
IndexRoute
any more<Route exact path="/" component={Home}/>
equal to <IndexRoute component={Home}/>
// Switch <Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/> import { Switch, Route } from 'react-router' <Switch> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/> </Switch> /* there will only ever be one child here */ <Fade> <Switch> <Route/> <Route/> </Switch> </Fade> <Fade> <Route/> <Route/> </Fade> /* there will always be two children here, one might render null though, making transitions a bit more cumbersome to work out */
https://github.com/ReactTraining/react-router/issues/4732#issuecomment-317239220
https://reacttraining.com/react-router/web/api/Switch
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With