92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: React Router Cheatsheet
 | |
| ---
 | |
| Based on <a href='http://ricostacruz.com/cheatsheets/react-router.html' target='_blank' rel='nofollow'>http://ricostacruz.com/cheatsheets/react-router.html</a> but updated for v2.0.0 of React Router.
 | |
| 
 | |
| ## Basic
 | |
| 
 | |
|     import { render } from 'react-dom'
 | |
|     import { Router, Route, browserHistory } from 'react-router'
 | |
| 
 | |
|     // Import RootView and NoMatch
 | |
| 
 | |
|     render((
 | |
|       <Router history={browserHistory}>
 | |
|         <Route path="/" component={RootView} />
 | |
|         <Route path="*" component={PageNotFound} />
 | |
|       </Router>
 | |
|     ), document.getElementById('app'))
 | |
| 
 | |
| ## Nesting
 | |
| 
 | |
|     import React from 'react'
 | |
|     import { render } from 'react-dom'
 | |
|     import { Router, Route, browserHistory } from 'react-router'
 | |
| 
 | |
|     // Import About, Inbox and Messages
 | |
| 
 | |
|     class Chrome extends React {
 | |
|       render () {
 | |
|         return (
 | |
|           <div>
 | |
|             <h1>App</h1>
 | |
|             <a href="/about">About</a>
 | |
|             <a href="/inbox">Inbox</a>
 | |
|             <a href="/messages">Messages</a>
 | |
|             { this.props.children }
 | |
|           </div>
 | |
|         )
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     render((
 | |
|       <Router history={browserHistory}>
 | |
|         <Route path="/" component={Chrome}>
 | |
|           <Route path="about" component={About} />
 | |
|           <Route path="inbox" component={Inbox} />
 | |
|           <Route path="messages" component={Messages} />
 | |
|         </Route>
 | |
|       </Router>
 | |
|     ), document.getElementById('app'))
 | |
| 
 | |
| ## URL params
 | |
| 
 | |
|     class Message extends React {
 | |
|       componentDidMount() {
 | |
|         // from the path `/inbox/messages/:id`
 | |
|         const id = this.props.params.id
 | |
|         ...
 | |
| 
 | |
| ## Link
 | |
| 
 | |
|     import { Link } from 'react-router'
 | |
| 
 | |
|     /* Nav Component */
 | |
|       ...
 | |
|       render() {
 | |
|         ...
 | |
|         const userId = 10;
 | |
| 
 | |
|         return (
 | |
|           // Adding params is as simple as appending them to the route
 | |
|           <Link to={`user/${userId}`}>User 10</Link>
 | |
| 
 | |
|           // Classes can be added to the link element if the current route is the one they link to
 | |
|           <Link to="login"
 | |
|             activeClassName="-active">Login</Link>
 | |
|         )
 | |
|       }
 | |
| 
 | |
| ## Other config
 | |
| 
 | |
|     <Route path="/">
 | |
|       <IndexRoute component={Home} />
 | |
|       <Route path="*" handler={NotFound} />
 | |
| 
 | |
|       // arbitrary/url/login -> /arbitrary/url/sessions/new
 | |
|       <Redirect from="login" to="sessions/new" />
 | |
|       // arbitrary/url/about/1 -> /arbitrary/url/profile/1
 | |
|       <Redirect from="about/:id" to="profile/:id" />
 | |
| 
 | |
|       <Route name="about-user" ... />
 | |
|       ... |