No site found for codelikethis.herokuapp.com; using CodeLikeThis content.
Slides
React Routing - Going Further
React Router offers a lot of power and flexibility, we will explore the following features in upcoming slides.
- Validating routes with Regular Expressions
 - Capturing and parsing URL Query Parameters
 - Using Switch Routing Components
 - Rendering a catch all route as a friendly 404
 - Redirecting to other pages or websites
 
React Routing - RegEx Validation
- Routes can use Regular Expressions to determine a match
 - Almost all valid RegExs are acceptable, check Path-to-Regexp / Express Route Tester
 - Path parts can be validated separately
 
Example
<Route
  path="/:a([A-Za-z]+)"
  render={({ match, props, location }) => (
    <h1>
      All word characters: {match.params.a}
      {console.log({ match })}
      {console.log({ location })}
    </h1>
  )}
/>
React Routing - RegEx Validation Parts
Example
<Route
  path="/:a([A-Za-z]+)/:b(\d+)"
  render={({ match, props, location }) => (
    <h1>
      Words then numbers: {match.params.a} | {match.params.b}
      {console.log({ match })}
      {console.log({ location })}
    </h1>
  )}
/>
React Routing - Query Parameters
- Query parameters are the 
name=valuepairs afte a?in a URL - 
<Link />Components can pass URL Parameters to a Route - The 
toparam works differently between strings and objects - Params can be parsed using 
new URLSearchParams(params) 
Example
const Nav = props => {
  return (
    <div>
      <Link to="/path?id=42">Params within 'to'</Link>
      <br />
      <Link to={{ pathname: "/path?id=9000" }}>Params within Pathname</Link>
      <br />
      <Link to={{ pathname: "/path", search: "id=789" }}>
        Params 'Search' property
      </Link>
    </div>
  );
};
React Routing - Switch Component
- Useful to avoid over matching
 - Switch renders only the first matching 
<Route>instead of all - Can be used to build a catch all route for 404 like pages
 
Example
const App = props => {
  return (
    <BrowserRouter>
      <React.Fragment>
        <Nav />
        <Switch>
          <Route path="/posts" component={Posts} />
          <Route path="/authors" component={Authors} />
          <Route path="/:author/:post" component={AuthorPost} />
          <Route exact path="/" component={Home} />
        </Switch>
      </React.Fragment>
    </BrowserRouter>
  );
};
React Routing - Catch All Route
- Catch all routes can be useful to prevent 404 errors
 - Allow for a 'helpful' message, instead of a "Page Not Found" HTTP error
 - Are easy to create with the 
<Switch>and<Route>components 
Example
const NotFound = () => (
  <div>
    <h1>That page was not found</h1>
  </div>
);
const App = props => {
  return (
    <BrowserRouter>
      <React.Fragment>
        <Nav />
        <Switch>
          <Route path="/posts" component={Posts} />
          <Route path="/authors" component={Authors} />
          <Route exact path="/" component={Home} />
          <Route path="" component={NotFound} />
        </Switch>
      </React.Fragment>
    </BrowserRouter>
  );
};
React Routing - Redirection
Examples
const Home = () => <h1>You are Home</h1>;
const Posts = () => <h1>All the Posts</h1>;
const App = props => {
  return (
    <BrowserRouter>
      <React.Fragment>
        <Nav />
          <Route path="/posts" component={Posts} />
          <Route path="/willredirect" render={() => (
            <Redirect to="/posts" />
          )} />
          <Route exact path="/" component={Home} />
      </React.Fragment>
    </BrowserRouter>
  );
};