Routes tell your Remix app which page to show for each web address. They help users see different content when they visit different URLs.
When you want to show a homepage at '/'
When you want to create a page for '/about' with info about your site
When you want to make a page for each blog post like '/posts/123'
When you want to organize your app into sections with different URLs
When you want to handle user navigation between pages
Syntax
Remix
Create a file inside the 'app/routes' folder with the path name matching the URL.
Example: 'app/routes/about.jsx'for'/about' route.
Inside the file, export a React component as default:
export default function About() {
return <div>About page content</div>;
}
File names inside 'app/routes' map directly to URL paths.
Use square brackets for dynamic routes, e.g., '[id].jsx' for '/:id'.
Examples
This creates the homepage at URL '/'
Remix
// File: app/routes/index.jsx
export default function Home() {
return <h1>Welcome to the homepage!</h1>;
}
This creates a page at '/about'
Remix
// File: app/routes/about.jsx
export default function About() {
return <p>This is the about page.</p>;
}
This creates a dynamic route for posts like '/posts/123', showing the post ID.
Remember to restart your Remix dev server if new route files don't appear immediately.
Use nested folders inside 'app/routes' to create nested URLs, like 'app/routes/blog/posts.jsx' for '/blog/posts'.
Summary
Routes are created by adding files in the 'app/routes' folder.
File names match URL paths; use '[param]' for dynamic parts.
Each route file exports a React component that renders the page.
Practice
(1/5)
1. In Remix, how do you create a new route that matches the URL path /about?
easy
A. Create a file named about.jsx inside the app/routes folder.
B. Add a function named about() in app/root.jsx.
C. Create a folder named about inside app/components.
D. Add a route entry in a routes configuration file.
Solution
Step 1: Understand Remix routing structure
Remix creates routes based on files inside the app/routes folder.
Step 2: Match file name to URL path
To create a route for /about, create about.jsx inside app/routes.
Final Answer:
Create a file named about.jsx inside the app/routes folder. -> Option A
Quick Check:
Route file name = URL path [OK]
Hint: Route files in app/routes match URL paths directly [OK]
Common Mistakes:
Trying to add routes in root.jsx instead of app/routes folder
Creating route files in app/components folder
Expecting a config file for routes
2. Which of the following is the correct way to define a dynamic route parameter for a user ID in Remix?
easy
A. Create a file named user-$id.jsx inside app/routes.
B. Create a file named user/[id].jsx inside app/routes.
C. Create a file named user/:id.jsx inside app/routes.
D. Create a file named user/{id}.jsx inside app/routes.
Solution
Step 1: Recall Remix dynamic route syntax
Remix uses square brackets [param] in file names to define dynamic route parts.
Step 2: Match dynamic user ID route
For a user ID parameter, the file should be named user/[id].jsx.
Final Answer:
Create a file named user/[id].jsx inside app/routes. -> Option B
Quick Check:
Dynamic route uses [param] syntax [OK]
Hint: Use square brackets [param] for dynamic route files [OK]
Common Mistakes:
Using $id or :id instead of [id]
Using curly braces {id} which is invalid
Placing dynamic routes outside app/routes
3. Given the file app/routes/blog/[slug].jsx exporting a React component that renders <h1>{params.slug}</h1>, what will be rendered when visiting /blog/hello-world?
medium
A. Nothing, route not found
B.
[slug]
C.
blog/hello-world
D.
hello-world
Solution
Step 1: Understand dynamic route parameter usage
The file [slug].jsx captures the URL part after /blog/ as slug.
Step 2: Rendered output for /blog/hello-world
The component renders <h1>{params.slug}</h1>, so params.slug is hello-world.
4. You created a file app/routes/profile.jsx but visiting /profile shows a 404 error. What is the most likely cause?
medium
A. The file does not export a React component as default.
B. The file name should be profile.js instead of profile.jsx.
C. You need to add a route entry in a config file.
D. The route path should be /profiles to match the file.
Solution
Step 1: Check route file export requirements
Remix requires route files to export a React component as the default export.
Step 2: Identify cause of 404 error
If the file exists but does not export a default React component, Remix treats it as no route, causing 404.
Final Answer:
The file does not export a React component as default. -> Option A
Quick Check:
Default export React component required [OK]
Hint: Always export a default React component in route files [OK]
Common Mistakes:
Using named exports only without default export
Wrong file extension causing import issues
Expecting config file for routes
5. You want to create nested routes for a blog: /blog shows a list, and /blog/[postId] shows a post detail. How should you organize files in app/routes?
hard
A. Create blog.jsx and blog/[postId].jsx inside app/routes.
B. Create blog/index.jsx and blog-postId.jsx inside app/routes.
C. Create a folder blog with index.jsx and [postId].jsx inside it.
D. Create blog-list.jsx and blog-post.jsx inside app/routes.
Solution
Step 1: Understand nested route folder structure
Remix supports nested routes by creating folders with an index.jsx file for the base path.
Step 2: Organize blog routes
Put index.jsx inside blog folder for /blog, and [postId].jsx for dynamic post detail.
Final Answer:
Create a folder blog with index.jsx and [postId].jsx inside it. -> Option C
Quick Check:
Nested routes use folders with index.jsx [OK]
Hint: Use folder with index.jsx for base route, dynamic files for params [OK]
Common Mistakes:
Placing all files flat without folders for nested routes
Using dash instead of brackets for dynamic routes
Naming files incorrectly for nested paths
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.