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" ... />
 | 
						|
      ... |