Skip to content

Instantly share code, notes, and snippets.

@JoshSevy
Forked from khalidwilliams/React Router Prework.md
Last active August 24, 2020 22:11
Show Gist options
  • Save JoshSevy/900d7a5bd731936715b31c886cd7a29f to your computer and use it in GitHub Desktop.
Save JoshSevy/900d7a5bd731936715b31c886cd7a29f 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
  3. Comment a link to your forked copy on the original gist

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:

  1. 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)

  2. What package do we need to install to use React Router?

npm install 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 />?

<BrowerRouter /> is a router component from the react-router-dom library. It watches the URL to keep your UI aligned with the URL path, it uses regular URL paths to do this. It seems to utilize some built in methods ( pushState, replaceState, and popstate event ) that allows <BrowserRouter /> to update the children to the current URL, allowing for the page or app to update.

Example: www.mypage.com/home <=== this would be a path we could utilize with `<BrowserRouter />` and router matchers. 
  1. Why would we use <BrowserRouter /> in our apps?

It uses URL that is already familiar with most users, is cleaner. It can require some server-side setup but seems it would give a better user experience over using <HashRouter />

Route Matchers

  1. What does the <Route /> component do?

Route matches the path with the current URL and renders that Route.

Example:

<Route path="/about">
  <About />
</ Route>
  1. How does the <Route /> component check whether it should render something?

It is actually always rendering, just not always rendering the children(components). If the URL patch matches the path on the <Route />, it renders those children to the DOM.

  1. What does the <Switch /> component do?

It works really similar to switch conditional statements in JavaScript, with the path being the matching case:. It renders the first matching child within the <Switch />. However, it does this exclusively so any <Route /> that matches will be rendered to the page, unless the exact keyword is added to the Route.

  1. How does it decide what to render?

It decides by the URL and matching path set on the <Route />. I believe this is passed down from <BrowserRouter />.

Route Changers

  1. What does the <Link /> component do? How does a user interact with it?

<Link /> helps us navigate to these URL locations in our application. They seem to work just like an anchor tag in HTML, the path being the href. User can interact with click or tabbing to element and pushing enter.

  1. What does the <NavLink /> component do? How does a user interact with it?

Similar to <Link /> from above but adds styling to the rendered element when it matches current URL. Also, user can interact with by clicking on the link.

  1. What does the <Redirect /> component do?

Will navigate to a new location and override the current location in the history stack, in the examples it shows it being used with a conditional statement allowing for some dynamic routing, such as a user logging in.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment