Skip to content

Instantly share code, notes, and snippets.

@stephanieguzm
Forked from letakeane/React_Router_prework.md
Last active October 18, 2022 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stephanieguzm/a3ffc6837ba70d5215f8c71fba7c7c9c to your computer and use it in GitHub Desktop.
Save stephanieguzm/a3ffc6837ba70d5215f8c71fba7c7c9c to your computer and use it in GitHub Desktop.

React Router Prework

This gist contains a short assignment I'd like everyone to complete before our formal lesson. The prework involves reading some of the React Router documentation, and will allow us to keep the lesson more hands on.

Instructions

  1. Fork this gist
  2. On your own copy, go through the listed readings and answer associated questions

You will not be turning this in; it's for your own understanding/learning/benefit 😁

Questions / Readings

Router Overview

React Router is a library that allows us to make our single page React applications mimic the behavior of multipage apps. It provides the ability to use browser history, allowing users to navigate with forward / back buttons and bookmark links to specific views of the app. Most modern sites use some form of routing. React Router exposes this functionality through a series of components. Let's start by looking at the overall structure of an app using router:

  • Take a look at the quick start page of the React Router docs. Take note of the syntax and organization of the page. No worries if this looks unclear right now! (nothing to answer here)
 <Router> </Router> component: parent component used to add routes to diff page views
 <Link> </Link> component: link url path
 <Switch> </Switch> component: renders one page view if the path matches exactly
 Home route '/' is listed last within a `Switch` to ensure it is not the default path
  • What package do we need to install to use React Router? npm i react-router-dom

Router Components

React Router provides a series of helpful components that allow our apps to use routing. These can be split into roughly 3 categories:

  • Routers
  • Route Matcher
  • Route Changers

Routers

Any code that uses a React-Router-provided component must be wrapped in a router component. There are lots of router components we can use, but we'll focus on one in particular. Let's look into the docs to learn more.

  1. What is a <BrowserRouter />?
  • Router implementation that uses HTML5 history API to keep UI in sync with URL. Parent component used to store all components.
  1. Why would we use <BrowserRouter /> in our apps?
  • It allows for a better user experience and streamlines rendering of pages. Instead of adding conditional rendering to pages, it does the conditional rendering for us to show the user the intended view.

Route Matchers

  1. What does the <Route /> component do?
  • Takes user to a page view for the selected component
  • Holds a conditionally rendered component that renders UI when its path matches the selected URL
  <Route path={`${match.path}/:topicId`}>
    <Topic />
  </Route>
  1. How does the <Route /> component check whether it should render something?
  • When its path matches the selected URL (location)
  • When <Route>s path matches the selected URL, it renders its children (components)
  1. What does the <Switch /> component do?
  • Renders the first <Route> or <Redirect> component that exactly matches the selected path URL
  • All children of <Switch> must be <Route> or <Redirect>
  1. How does it decide what to render?
  • It searches for and renders the Route with the matching URL and ONLY that route

Route Changers

  1. What does the <Link /> component do? How does a user interact with it?
  • It's literally a link to a new location like you'd see in a navbar
  • Replaces the <a href> tag
  • Provides declarative, accessible navigation around your application
  1. What does the <NavLink /> component do? How does a user interact with it?
  • Special version of <Link> that adds styling attributes to the rendered element when it matches the selected URL.
<NavLink to="/faq" activeClassName="selected">
  FAQs
</NavLink>
  1. What does the <Redirect /> component do?
  • Navigate to a new location. Overrides the current location in the history stack
  • When you want to force navigation, you can render a <Redirect> <Redirect> will navigate to a new location. The new location will override the current location in the history stack, like server-side redirects 404.
<Route exact path="/">
  {loggedIn ? <Redirect to="/dashboard" /> : <PublicHomePage />}
</Route>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment