How to Create Layout Route in Remix: Simple Guide
In Remix, create a layout route by making a route file with a
Outlet component to render child routes inside it. This lets you share common UI like headers or sidebars across multiple pages by nesting routes in the file system.Syntax
A layout route in Remix is a route file that uses the Outlet component from @remix-run/react to render nested child routes. The basic syntax includes importing Outlet and returning it inside your component, optionally wrapping it with shared UI elements.
Example parts:
import { Outlet } from '@remix-run/react': imports the Outlet component.function Layout() { return (<div>...<Outlet />...</div>) }: defines the layout component with shared UI and the outlet.export default Layout: exports the layout route component.
jsx
import { Outlet } from '@remix-run/react'; export default function Layout() { return ( <div> <header>Shared Header</header> <main> <Outlet /> </main> <footer>Shared Footer</footer> </div> ); }
Example
This example shows a layout route at app/routes/dashboard.jsx that wraps child routes like dashboard/profile.jsx and dashboard/settings.jsx. The layout displays a header and footer on all dashboard pages.
jsx
// app/routes/dashboard.jsx import { Outlet } from '@remix-run/react'; export default function DashboardLayout() { return ( <div> <header style={{ background: '#eee', padding: '1rem' }}> <h1>Dashboard</h1> </header> <main style={{ padding: '1rem' }}> <Outlet /> </main> <footer style={{ background: '#eee', padding: '1rem' }}> © 2024 My App </footer> </div> ); } // app/routes/dashboard/profile.jsx export default function Profile() { return <p>This is the profile page inside the dashboard layout.</p>; } // app/routes/dashboard/settings.jsx export default function Settings() { return <p>This is the settings page inside the dashboard layout.</p>; }
Output
<header style="background: #eee; padding: 1rem;"><h1>Dashboard</h1></header>
<p>This is the profile page inside the dashboard layout.</p>
<footer style="background: #eee; padding: 1rem;">© 2024 My App</footer>
Common Pitfalls
Common mistakes when creating layout routes in Remix include:
- Forgetting to include the
<Outlet />component, which causes child routes not to render. - Placing layout routes in the wrong folder, so nested routes are not recognized.
- Not exporting the layout component as default, which Remix requires for routing.
Always ensure your layout route file matches the folder structure for nested routes and includes Outlet.
jsx
/* Wrong: Missing Outlet, child routes won't render */ export default function Layout() { return <div>Shared UI but no Outlet</div>; } /* Right: Include Outlet to render nested routes */ import { Outlet } from '@remix-run/react'; export default function Layout() { return ( <div> Shared UI <Outlet /> </div> ); }
Quick Reference
Tips for creating layout routes in Remix:
- Use
Outletto render nested routes inside your layout. - Match your route file structure to the URL path hierarchy.
- Wrap shared UI elements like headers, footers, or sidebars around
Outlet. - Export your layout component as default.
- Test nested routes to confirm layout renders correctly.
Key Takeaways
Create a layout route by exporting a component with the
Outlet to render nested routes.Place layout route files in folders matching the URL structure for nested routing.
Always include
Outlet inside your layout to show child routes.Wrap shared UI elements like headers and footers around
Outlet for consistent layout.Export the layout component as default to enable Remix routing.