React-router

How to add to project:

yarn add react-router-dom

wrap your root cmp with Router

import { BrowserRouter } from 'react-router-dom'

ReactDOM.render((
  <BrowserRouter>
    <App/>
  </BrowserRouter>
), document.getElementById('root'))

install react-router-dom package

export default function App() {
  return (
    <div>
      <nav>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
          <li>
            <Link to="/users">Users</Link>
          </li>
        </ul>
      </nav>

      <Routes>
        <Route path="/about" element={<About />} />
        <Route path="/users" element={<Users />} />
        <Route path="/" element={<Home />} />
      </Routes>
    </div>
  );
}
import React from "react";
import {
  Routes,
  Route,
  Link
} from "react-router-dom";
function Home() {
  return <h2>Home</h2>;
}

function About() {
  return <h2>About</h2>;
}

function Users() {
  return <h2>Users</h2>;
}

Routes (v6) vs Switch (older version)

const Main = () => (
  <main>
    <Switch>
      <Route path='/' component={Home}/>
      <Route path='/students' component={Students}/>
    </Switch>
  </main>
)
<Routes>
  <Route path='/' element={<Home />}/>
  <Route path='/students' element={<Students/>}/>
</Routes>

<Routes>
  <Route path="teams/:teamId" element={<Team />} />
  <Route path="teams/new" element={<NewTeamForm />} />
</Routes>

Nested routing

function App() {
 return (
   <BrowserRouter>
     <Routes>
       <Route path="/" element={<Home />} />
       <Route path="/topics" element={<Topics />}>
         <Route path="list" element={<TopicsList />} />
         <Route path=":id" element={<TopicPage />} />
       </Route>
     </Routes>
   </BrowserRouter>
 );
}
import { Outlet } from 'react-router-dom'

function Topics() {
 return (
   <div>
     <h1>Topics page</h1>

     <Outlet />
   </div>
 );
}
<Route path="/topics/*" component={Topics} />
function Topics() {
 return (
   <div>
     <h1>Topics page</h1>

     <Routes>
       <Route path="list" element={<TopicsList />} />
       <Route path=":id" element={<TopicPage />} />
      </Routes>
   </div>
 );
}
function Topics() {
 return (
   <div>
     <h1>Topics page</h1>

     <Routes>
       <Route index element={<TopicsList />} />
       <Route path=":id" element={<TopicPage />} />
      </Routes>
   </div>
 );
}

Index routes

<Route path="/topics/*" component={Topics} />

useParams

useLocation
useNavigate

Hooks:

react-router

By Aleh Lipski

react-router

  • 105