🚆 Routing and Layout
Design the layout and routing structure with React Router
In React Router, all routes must be nested inside which component?
React Router docs: https://reactrouter.com/en/main
Command to install react router:
yarn add react-router-dom
Initial routing in the App.tsx
file:
const router = createBrowserRouter([
{
path: "/",
element: <Layout />,
children: [
{
path: "",
element: <MessageBoard />,
children: [
{
path: ":pageNumber",
element: <AllPosts />,
},
{
path: "post/:postId",
element: <PostView />,
},
],
},
{
path: "welcome",
element: <Welcome />,
loader: welcomeLoader,
},
],
},
]);
function App() {
return <RouterProvider router={router} />;
}
export default App;
function Layout() {
<>
<NavBar />
<Outlet />
</>;
}
Our starting NavBar component:
import { Link } from "react-router-dom";
export default function NavBar() {
return (
<>
<nav className="nav-bar">
<Link className="nav-logo-link" to="/">
<img
id="logo"
className="nav-logo"
src="https://supaship.io/supaship_logo_with_text.svg"
alt="logo"
/>
</Link>
<ul className="nav-right-list">
<li className="nav-message-board-list-item">
<Link to="/1" className="nav-message-board-link">
message board
</Link>
</li>
</ul>
</nav>
</>
);
}
Adding an outlet to the message board for nested routes:
export default function MessageBoard() {
return (
<div className="message-board-container">
<Link to="/1">
<h2 className="message-board-header-link">Message Board</h2>
</Link>
<Outlet />
</div>
);
}