February 23, 2026 — Slides: React Libraries & Router
npm install lib-name, import the component, render with expected props// Using a React library
import { ComponentName } from 'lib-name';
function App() {
return <ComponentName prop="value" />;
}
// Conceptual client-side routing
function App(props) {
let componentToRender = null;
if (currentUrl === '/home') {
componentToRender = <HomePage />;
} else if (currentUrl === '/about') {
componentToRender = <AboutPage />;
}
return <div>{componentToRender}</div>;
}
npm install react-routerBrowserRouter tracks the current URL in its state and re-renders descendants when the URL changes<App /> in <BrowserRouter> in main.jsximport { BrowserRouter } from 'react-router';
import App from './components/App.jsx';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
<Routes> contains <Route> elements that specify which component to render for each URL pathpath prop matches the URL, element prop specifies the component to renderimport { Routes, Route } from 'react-router';
function App(props) {
return (
<Routes>
<Route path="home" element={<HomePage />} />
<Route path="about" element={<AboutPage />} />
</Routes>
);
}
<Link> instead of <a> for navigation between routesto prop specifies the destination path (like href for anchors)import { Link } from 'react-router';
function Nav(props) {
return (
<nav>
<ul>
<li><Link to="home">Home</Link></li>
<li><Link to="about">About</Link></li>
</ul>
</nav>
);
}
:param syntax in the path (e.g., posts/:postId)useParams() hook accesses the value of URL parametersimport { useParams } from 'react-router';
// In Routes:
<Route path="posts/:postId" element={<BlogPost />} />
// In Component:
function BlogPost(props) {
const urlParams = useParams();
const postId = urlParams.postId;
return <h1>You are looking at blog post {postId}</h1>;
}
<Routes>
<Route path="/products" element={<AllProductsPage />} />
<Route path="/products/hat" element={<HatPage />} />
<Route path="/products/shoes" element={<ShoesPage />} />
<Route path="/account" element={<AccountPage />} />
</Routes>
<Route> elements for each segment<Outlet /> component in the parentimport { Outlet } from 'react-router';
function App(props) {
return (
<Routes>
<Route path="user" element={<UserLayout />}>
<Route path="profile" element={<UserProfile />} />
<Route path="favorites" element={<FavoriteItems />} />
</Route>
<Route path="items" element={<ItemList />} />
</Routes>
);
}
function UserLayout(props) {
return (
<div className="user-layout">
<h1>User Page</h1>
<Outlet />
</div>
);
}
<Outlet /> or a fallbackfunction RequireAuth(props) {
if (!userIsLoggedIn) {
return <p>Forbidden!</p>;
} else {
return <Outlet />;
}
}
function App(props) {
return (
<Routes>
<Route element={<RequireAuth />}>
<Route path="profile" element={<ProfilePage />} />
<Route path="secret" element={<SecretPage />} />
</Route>
<Route path="signin" element={<SignInPage />} />
</Routes>
);
}
<Route path="" element={} /> maps URL paths to components<a> tags for client-side navigation without full page reloads:param syntax in paths, accessed with useParams() hook<Outlet /> component<Outlet /> based on auth state