React Router Crash Course

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
React router is commonly used to create different  routes for pages in react applications. This   course will teach you how to use react  router to create your own routes in react,   we're going to learn about react router, and its  different concepts such as creating different   routes for different pages in react. Also,  we're going to learn how to nest a route of a   page under another page. hooks like US history,  use params, use locations and use route match,   also how to fetch a query string in form of a  variable from the URL. So let's get started.   Okay, so let's start by creating a  new react app. I'm going to type NP x   create react app, and the name of our app,  which I'm going to give react router tutorial.   Now what is going to do, it's going to go to NPM  website or NPM repository and going to take all   of the things needed to create a new react app.  And it's going to put all of those things into   this folder, React router tutorial, it's going  to find all of the dependencies that we need to   create our react app. And it's going to basically  initialize a boilerplate code for our react app.   Alright, so it has successfully  initialized our new react app.   Now we need to switch to that folder,  what we can do is either we can type cd,   and the name of the folder, you can switch  this way. Or what you can do is you can   open that folder in VS code, which in my case is  this folder. And I'm going to select this folder.   So here we go. I folder has been  opened in the VS code successfully.   So what I'm going to do now is I'm going to type  NPM start. So it's going to start our react app.   Here's our react app running successfully. So  what I'm going to do now is I'm going to go I'm   going to go to the src folder. And I'm going  to get rid of those things that we don't need   this, this, this and this, we're going to get rid  of these four files. And we're going to remove the   places that they were being used. So over here.  And we're going to get rid of all of these styles.   Inside app j s, app dot j s, I'm going  to get rid of this. Get rid of logo.   And now you'll see that our app will have nothing  to show. Me refresh it. Yep, there you go.   It's an empty page. Okay, so what  I'll do now is I'm going to type   h1, h1, react, router Dom tutorial, for this  react router tutorial. Let's save this and see.   Yes, it has successfully rendered this over here.  So let's create a different component for header.   When you create a new component  called a new folder called components,   it's not necessary to create a separate folder  for components, but it's a good practice.   I'm going to create a different component for  header dot j, s. And I'm going to type our A,   F, C underscore RFC and press Enter.  And let's copy the same thing. Over   here we go. Let's first center align this thing.  And then we're going to start with our tutorial.   So I'm going to give it a few of the styles in  app dot CSS. I'm going to get rid our display flex   and justify content. No,  sorry. I mean to say align   items to center and flex direction is going to be  column because we want everything to be top down.   You know, aligned. So yeah,  here we go. You're nice.   It is in the center. So yeah, I haven't done  this. imported the header component. Yeah.   header is not defined. Let's  just import it manually.   Here we go. It should work fine now. Yep, here  we go. It's working fine. So now we're going   to install react router DOM. So I'm going  to open a new terminal and type NPM I react   router DOM. And you know what I'm gonna go to  header and get rid of this dev Let's use the   React fragment. So if you don't know what react  fragment is, you can watch my previous video on   eight clean code practices in react, it's going to  help you a lot 2000 years later, or it's finally a   react router Dom has installed successfully.  So I'm going to go to my app JS component.   And to use our react router DOM, what  we'll need to do is we're going to have to   cover this whole react app in something  called browser router, browser router,   which comes from react router DOM,  so you can see it has auto imported.   So I'm going to pull off my app in this.  Alright, here we go. Let's close this terminal.   I think I'm going to have to restart my  application. So let me just do that quickly.   Alright, it's fine now. So what are we what are  we going to do next is we're going to create   different different routes for different  different pages that we're going to work with.   So let's create a route for homepage about page  and profile page. Yeah, so I'm going to type route   and press Enter. And you can see  route has auto imported from VS code   coming from react router, Dom VS code has auto  imported it. So I'm going to give it a path.   This is going to be your homepage. So it's going  to be this. And we have to give it a component,   which we'll create in a second. So let's duplicate  these paths. Another one will be for about.   And the third one will be for profile. So let's  create these pages. First, I'm going to create a   new folder with the name of pages. Home dot j s,  I'm going to create a file called about dot j s.   And the third file will be profile dot j s. Next,  let me quickly write some code inside of this   type homepage. Remove these divs and add h1.  Next, same thing with the about page. bout page.   And the profile page. All right, good.  profile page. Alright, cool. So we have   created all of our three routes. Now let's  test these routes if these are working or not.   So let me save my app real quick. Okay,  there's an ad a worse theater. Okay,   we haven't even the components, obviously.  So let's just give this home. Go   Oh, sorry. My bad, we have to import all of  these components first. So import home from   slash home. And I'm going to do for  about and profile as well. So about   and profile. Let me just bow and put off five.  Here we go. So we have created three routes.   This is how you create a route in react by  using react router DOM. So you can see it's   currently in the root folder, I mean, in  the root path. So it's giving us homepage.   Let's go to the about page route. There we  go it giving us about but you can see the   homepage is also appearing here and  about page is also appearing here.   Why is that happening? Because you can see it, it  has about page as well. And this route as well.   In this init spot, it has route as well.  So what we can do is we can type exact,   so it's gonna go exactly to this path and  not nowhere else. So if it type about it's   going to click open about page. And if you  type profile, it's going to go to work.   Okay, I have made this mistake. Yeah, now  it's gonna work fine. If I go to profile page,   it's gonna open the profile page.  Another thing which you can do apart   from exact is you can use something called  switch. So if I type switch over here,   and we're going to take all of these three  inside of the switch, and I've imported   the switch from react router DOM. So is what  switch does is when you go to a particular path,   let me remove this exact from here. So it's  gonna find whatever it finds first is gonna   stop there. For example, it has written slash  profile. So it has found the slash path First,   it has matched this path slash with this. So  it is found the homepage is going to render   if we use Switch Murphy type exact, then  we're not going to have the same problem now.   You can see it's rendering the  profile. Now, let me type about.   Alright, here we go about page. All right, one  more thing. So we don't need to manually type this   in the URL. So what can we do to go to another  page, in the traditional web development in the   HTML, we use something called a tag to go to a  different page. So we can use that over here as   well. But it has a disadvantage, what disadvantage  is there, when we click on this a tag, it's   going to refresh our page, let me demonstrate  that thing. So I'm going to go to our header,   I'm going to create a navigation menu for our  app. Let me create an unordered list over here.   I'm going to create few list items, and have  a new tag inside of it with h ref of a partner   first is going to be the homepage. So let's  type slash over here and give it a name of home.   Alright, so I'm going to duplicate these  multiple times, and going to give this about   about seem to get a profile,  and profile. Let's save this.   And currently looks a bit ugly. So I'm  going to give it a little bit of styling.   So let's go to our app CSS. And I'm going to  add some styling to it. Let me give this a   class name. First, I'm going to give this class  name of now. Yeah. Let's give it some styles.   So I'm going to type list style type is going to  be none so that it doesn't displace the bullet.   And I'm going to type width to be 500  pixels. So I'm going to type display, flex   and justify content to be spaced  evenly swear it spreads around evenly.   Now you'll see Yep, it has spread around  evenly. Now let's click on one of these links.   If I'm going to click on home, you can  see the page has refreshed over here.   If I click on profile, again, the page has  refreshed we have reached the destination but   the page has refreshed. We don't want the page  to be refreshed. We don't want our components   to be re rendered. So what are we going to do  now. So instead of this a tag, what I'm going   to do is I will use something called link,  which is provided to us by react router DOM.   Let's click on this link. And you can see it  has auto imported. So over here as well. Link.   And lastly, yeah. What do we can't use h ref with  the link, we need to use something called to.   This is the prop that it takes. So let's  save it. Alright, our app has reloaded. And   let's click on About. Now you can see the  page has not refreshed if I click on home,   again. So you see this is the power of react  router DOM, it doesn't refresh your page,   and it takes you to another  page in a blink of an eye.   Alright, cool. So let's discuss some more  features of this library. So let's see if I want a   default route for our app. Now what I mean by that  is let me give a base name over here. If I give   the base name as a tutorial, and save this now you  see if I click on homepage, it's going to take us   to the slash tutorial. If I click on About, it's  going to take a slash tutorial slash about so this   is how you can define a base name for this by  typing base name equals whatever the name that   you need to use. If I click on profile, it's  going to take us slash tutorial slash profile.   So this is a really powerful feature. Let's  check out another feature of the browser router.   I'm going to remove this. And let's say for some  reason, you need to use the refresh feature.   So currently, it's not refreshing our page when  I'm taking it to another route. So if I type force   refresh over here, then you'll see what it does.  If I'm going to go to about you can see the   page is refreshing now it's providing the force  refresh forcely are apt to re render everything.   So you can use force refresh for that,  which I don't think anyone needs to use.   Also, if you want to confirm every time a  user goes to another route, for example,   if I click on About you need to confirm it by some  prompt or by some displaying some modal, what you   can use is called get user confirmation. You can  type get user confirmation, and then inside of   this you can write a class Message to be displayed  whenever the route changes. So I'm going to   write a function inside of it by typing message,  whoops message. And it's going to take a callback   is going to be an arrow function. callback is  going to take window, dot confirm. And you can   pass whatever component that you need to pass  inside of it. Let's say if you create a prompt,   you can pass inside a prompt inside of it or a  modal, but I don't think this is used that much   as well. So this is one of the features that you  can use in react router DOM. So let's remove this.   Yeah. All right, let's move forward.  First of all, I what I want to do is   the let's remove these styles from the  links. I don't want this style. So I'm   going to go to App dot CSS, and let's remove  the styles by typing a removing text decoration.   And go alone will be inherited. Yeah, fine. See,  our pages are not that big. Right now. If you go   to homepage, or if you go to profile page, it's  its height is not that big right now. But let's   say your your page is so big that you need to  scroll down. So whenever you change your route,   what's going to happen, it's going to continue  the other page from the same position. If so   what you want to do in that case, whenever you go  to a different component, you can type like this.   Let me just go over here to homepage. And you  I can, what I can do is I can use use effect.   And instead of use effect, I can type window dot  scroll to zero comma zero. So it's going to do   it's going to continue the other page from the  top and not the previous position that page was   when you were in the other component. So this is  helpful. Okay, so next important thing is if when   we type to some other route that doesn't exist,  right now, let me say anything like something,   and enter, you can see there's nothing being  displayed over here. We want something to display   over here, like 404 error page not found something  like that. So how can we display that over here?   let me create a new page for that. I'm going to  new command create a new page called not found   dot j s. Right? Let's initialize this page, A,  C, press Enter. And I'm going to give it an h1   of four books 404. Not Found. Let's save this.  Now how can we how can we use this? Now we need   to go over here and close this? Yeah, we need  to go over here we need to create another route,   we've created another route. In this case,  we're not going to give it any of the path   such as about our profile or anything,  we're just going to give it a component   not found. And we're going to manually import it.  Here we go. We've imported our not found page.   And here we go. The message is displayed  successfully. If I go to somewhere else,   it's going to still display this message. If I  go to a relevant page, like home about profile,   it's not going to display any of the message.  Alright, so let's move to the next thing, which   is taking parameters from the URL. So let's say  if I want a page like something called post, and   we want some random post. So we want this random  ID to be accessed by us. So what can we do over   here. So currently, it's going to show 404 not  found. So let's create a new page for our post.js.   So what we want to do is want we want to  fetch this particular ID. So let me type ID   is and we're going to display the particular  ID. I'm going to give it h two over here.   Currently, it's not going to  display anything if I go to post.   Okay, we haven't created that out obviously, we  need to go to App j s and create another out.   Here we go. We have created this part  successfully. Now you can see it showing   us ID is equals which we can't do anything if  the slash type anything. It's going to no it's   not a display anything. So what we need to do  now we're going to do is slash ID. So now it's   going to take a random ID from us. So if I go to  post now it's going to display not found because   that page doesn't point needs to have an ID  to display. So let's go back to our pitch.   And now we're going to use our first hook, which  is called use params. Or we can use a match as   well, let me just display, let me just demonstrate  it with the match first. So we're going to go   over here D, D structure the match from here.  And now, what we're gonna do is we're gonna   go over here and type match dot params. And  what what was the name of the params? It was ID,   let's save this. And let's check this out. Now.  Here we go. If I give this let me type random   over here, and press enter. You can see the  ID is generated, and it's displayed over here.   I mean, it's not generated, we have  provided it, but it's displayed over here.   Yeah, so what's the another other way to do this.  The other way to do this is using use params hook,   which is provided to us by react router DOM. So  I'm going to click over here. And you can see   it has auto imported from react router DOM. Now  we don't need this, I'm gonna get rid of this.   I'm gonna use use params. Let's first log this use  params. Let's see, what do we get inside of this.   I'm going to remove this now. So don't get  better. All right, let's log this use params.   and inspect this, you get an object. And this  object has something called ID inside of it,   which is the ID that we have passed over here. Let  me type something and press. Here we go. It has   given us another object with ID of something.  So now, we're going to use this use params.   I'm going to type const, ID equals use params.  And we're going to D structure this ID inside   of the use params. So we have taken out this  ID and we can just use this ID over here. Now.   Let's save this. Let's check here we go  something and we give it a random number.   And here's our ID displayed successfully.  So this is how you can fetch the ID from the   URL. Now let's say we need to use a we don't want  to change our route. But we still need to use   the variables from the URL. For example, if I type  question mark, and I, let's say I type name equals   viewshe. Let's say we want this name this  new How can we fetch this from the URL?   Is there any other way? So we're gonna use  our second hook called use location, use   location, and it's also provided to us by react  router DOM. So we're gonna type use location   over here, let me just log this use location  first. And check what do we get inside of this?   Let's go to inspect. We get an object. So  what does this object has it has a path name.   And it has a search with the value of name  equals viewshe. Let me type something else   first. equals viewshe. And we can type and  last equals Agarwal, which is my name. So yeah,   let's see. Now the value of search has changed  to first equals fusion logic, what? Now how do we   fetch these first and last variables from this  search? You know, variable search object. So   what I'm going to do now, so we're going to  use an inbuilt API from the browser called   URL search params. So I'm going to select it.  And I'm going to type you are l search params.   And I'm going to create an object out of it.  So I'm going to type new URL search params. And   what do we want inside of this use location, we  want this search. So let's type search. Alright,   let's take it in some variable. Let me type  const. query equals new URL search params.   Here we go. So how do we take out the stuff  from this query? So let me just go over here and   h2. And we need to use the first and the  last. So let's first extract the first one.   So query dot get. And in the bracket, we need  to, we need to write the variable that we need to   fetch from the URL. So I'm going to type first  and save this. Let's see what happens. Okay,   here we go. We get the page from here from  the first and let's fetch the last as well.   Last, here we go. So we can type n number of  queries inside of this URL, and we can Then by   using this method, use locations hook. So that's  pretty cool. Now let's see, let's suppose you have   a login feature in your app. And you want user to  access the profile only if that user logs in into   your app. So how are we going to modify our react  router Dom according to that, let's find out.   We're going to go to App j s. And we're going to  create a new state, let's say login. import the   user state from react, here we go. So by default,  login will be false. Login will have false value,   because we are not logged in now admit, let  me just create a button over here to log in.   But nobody has created it.  Let me just take this div and   put it over here so that everything  is centered. Yes, it's centered.   So what I want is, when I tap on this  login, we're going to simulate a login   feature by making this log in as true and it's  going to display log out then. So on click   what it should do, it should set login  as the opposite value. So if it's true,   it's going to be false. If it's false, it's going  to be true. Also, what I'll display over here is   if login is true, if which means  if user has successfully logged in,   then it should display Whoa, what's happening?  Yeah, then it should display logged out.   Otherwise, it should display login.   Let's save this. And let's see if it's working  or not. Okay, it's working fine. So what do we   want to do over here, if our user is not logged  in, he's not going to be able to access the   profile page, and he's going to be redirected  to the home page. So how can we achieve that,   we're going to use something called redirect from  react router DOM. So let's remove this component   from here. how I'm going to do this is here,  we're going to make the child component of this   route. So let's check this over here. If login  is true, if login is true, then it's going to   be able to access the profile page. So profile.  Otherwise, it's gonna be redirected. So redirect.   Where will it be redirected to home page. Here  we go. Alright, let's try clicking on our profile   page. Let me go to about page and let's click on  profile page. You can see we have been redirected   to homepage. We can't access the profile page  now. But the moment we press login, and let's go   to profile page. Now. Now we're able to access  the profile page. So it has became a protected   route for our app. If I'm inside of this profile  page. And if I press logo, let's see what happens.   It's gonna redirect us back to the homepage.  Now there's another way of doing this.   Let me show you, we can use something called  US history, US history hook. So let me just tie   this over here, I'm going to remove all of  this redirect stuff. Make it a normal route now   to working normally now without login. Alright.   So I'm going to, what I'm going to do is I'm going  to send the log in as a parameter inside of this   stuff, send the login as a params. Let's go to  profile and D structure the logging out of here.   Here we go. And let's create a use effect. So use  the effect brands whenever our app is initialized   first time. So I'm going to take the history out  of the US history hook. So let's type US history.   I'm going to assign it to const. History  variable. All right. It has auto imported   from react router DOM, what happened?  Okay, we haven't imported the US effect.   Here we go. Alright, so what do we need to type  inside of the US effect, we need to check if the   user is logged in. Or if the user is not logged  in? What are we going to do if he's not logged in?   Then we will use history. dot push is  going to push this path to our URL.   So it's going to push to the slash page which  is our home page. So let's try this out.   I'm at the homepage, let's go to profile page,  I'm not able to access the profile page. Now,   let's log in. And let's go to profile page. Here  we go. We're successfully in the profile page. And   let's log out now. Whoa, what happened? I think  I have missed some. Yeah. Okay. So if we wanted   to run whenever the login variable changes, so  I'm gonna provide login over here and history,   we're going to provide these two dependencies  inside of the use effect. Whenever these two   dependencies are gonna change. It's going to fire  off this function. Let's try again, we're going to   go to profile, it's not going there. I'm going  to type I'm going to click on login. What am I   saying today? Okay, so let's go to profile now.  Here we go, we're able to access the profile   page. Let's log out. Here we go. We're back at the  homepage, if we want to go to about page about,   let's say, if the user is not logged in, is  going to go to about page, if I click on profile,   see it redirects us to about page. But if you  are logging in, go to profile page. So I hope   you all understood, you know this feature of  react DOM. Let's move to the next feature.   So let's discuss how can we create  nested route inside of a particular page.   For example, if inside of the profile  page, I want to create two routes,   with the name of let's say, view profile, and  edit profile, and I don't want those two routes   to affect our whole react router system, we only  want them to work inside of this profile page. So   let's create two new routes over here. I'm going  to remove this, let me just put it inside of this   round braces and then provide  react fragments to these.   Alright, let's move this. Yeah, so I'm going  to create a navbar inside of a profile page.   I'm going to create a link tag  over here. And let's say view.   And the other link tag, is gonna  have heard it, edit profile, it's   also we haven't created these view profile  Edit Profile components yet. So we also   have to create those view profile.  Here we go. We need to provide it to   it's going to go to work. So first  of all, before doing all of this,   let's create our route and the component first  to read we have these errors out of the way.   So I'm going to go below this. And as  usual, we're going to create a switch.   Whoops, switch. x even has auto  imported or not, yes, it has.   Alright, we need to create two routes. Route  one will have path of slash, view profile.   And it has it's gonna have some component which  I'm going to create next. And the other one will   be the Edit Profile. Edit Profile. Yeah.  Let's create those two components first.   Review, proof filed or GS made a spelling mistake.  reprofiled rj What the heck. br o f i l e. Yes.   Edit profile.whoops.js. Let's create this RFC. And  I'm gonna give it a h two and view profile page.   This component created and  remediated profile image,   Edit Profile page, giving this h2 as well. Yeah,  fine. Let's move on to the next thing. Now we're   going to go back to our profile page. And over  here, we're going to go and give it a to to slash   Edit Profile. And this one to the view profile.  Let's see if it works or not. route is not defined   obviously route and links are not defined yet.  So I'm going to auto import it from the VS code.   With the help of VS code here, here we go.  All of these are important now. Alright,   let's see. What's the error  over here. Link is not defined.   Link is defined. You can see link is defined  over here. Let's meet Let me refresh this. Yep,   it's working fine. Let's go to the profile.  Okay, we have to log in first and let's go to   profile. Okay, we have view profile and edit  profile over here. But it's not working now.   But why is it not working now? Because we  have already created our routes over here.   So what do we need to do? So what do we need to  use now? Because we're going to use something   called use route, match hook, use route  match. So this is the hook that we're gonna   use to help us, you know, move the components  inside of other component. So let me type const.   And I'm going to take out something called  path and something called URL from inside of   this thing. So let's see how can we use this path  and URL, first of all, we want to go to, we don't   want to go to View profile, because it's taking  us to slash edit profile or slash view profile,   we want to go for example, if your add the  profile, we want to take the current URL,   and then append the view profile after it. So  what I'm going to type over here, first of all,   I'm going to remove this standard string  tags, and I'm going to use backticks. Oops.   Like that. Okay, so now we need to  provide a variable inside of it.   Which will be URL. Yep, now it's gonna  work fine. And the same over here.   URL, and I'm going to remove the  string and give it a backtick.   Just like that. So this is how it's going to work.   And what here as well. Okay, we haven't given  the component, prop. So it's gonna be view,   view, bureau file. So it's not auto importing.  Let me just import it over here. Your profile from   have to go one step back and inside of  the components and view profile, same   with the Edit Profile as well as your profile,  I should work now. Then we would have component   component of edit, profile. Yep. So here we go.  We have created our two routes over here. So   what do we need to do now, we need to provide  it the PATH variable. But it's going to know   that the current URL that we are in the current  path that we are in, we only need to append   this particular you, you know, URL to that URL, I  mean path to that URL, or the route to that URL.   So I'm going to type path over here, similarly,   but over here, just like that, you know, the  drill. I'm going to do this created a back tick.   Over here as well. Now, everything should  work fine. Let's try it out. If I click on   View profile, it's going to take us to view  profile page, you can see slash profile slash   view profile. And if I click on Edit Profile,  it's going to take us to edit profile page.   And all of the other routes are working absolutely  fine. There we go. If I click on logout, it's   going to take us to the home page. So thank you  all for watching this react router Dom tutorial.   I hope you all understood what are the concept  that I explained to you in this video. If you   have any confusion, you can comment down below  to ask me I'll reply to you as soon as possible.
Info
Channel: freeCodeCamp.org
Views: 41,839
Rating: 4.93121 out of 5
Keywords:
Id: Jppuj6M1sJ4
Channel Id: undefined
Length: 38min 56sec (2336 seconds)
Published: Wed Jun 30 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.