DEV Community

Cover image for Building a Modern Blog with Remix and React Router
Sohini Pattanayak
Sohini Pattanayak

Posted on • Edited on

Building a Modern Blog with Remix and React Router

Hey everyone! πŸŽ‰

This weekend, I decided to roll up my sleeves and dive into something new: building a blog using Remix and React Router. As someone who loves staying hands-on with the latest tech, this was the perfect opportunity to explore what these tools have to offer.

Why Remix and React Router?

Remix and React Router are a powerful combo for modern web development. Remix is a full-stack framework that leverages the best of React and the web platform to create fast, slick, and scalable applications. React Router, as the go-to standard for routing in React apps, complements Remix perfectly.

The Project: What We Did with Remix

Setting Up the Project

Getting started with Remix is straightforward. Here's a quick rundown:

  1. Install Remix: Create a new Remix project with this command:
 npx create-remix@latest 
Enter fullscreen mode Exit fullscreen mode
  1. Set Up Your Routes: In Remix, routing is file-based. Just create files in the routes directory, and they automatically become routes in your app.

Here's a peek at my routes:

app/routes/index.jsx

import { Link } from "@remix-run/react"; export default function Index() { return ( <div> <h1>Welcome to the Blog</h1> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About</Link></li> <li><Link to="/posts">Posts</Link></li> </ul> </nav> </div> ); } 
Enter fullscreen mode Exit fullscreen mode

This snippet shows off Nested Routing. The navigation links let users switch between different routes (/, /about, and /posts), rendering components within the main layout.

app/routes/about.jsx

export default function About() { return ( <div> <h1>About Us</h1> <p>This blog is built with Remix and React Router, showcasing modern web development.</p> </div> ); } 
Enter fullscreen mode Exit fullscreen mode

app/routes/posts.jsx

import { Link, useLoaderData } from "@remix-run/react"; // Define the loader function to fetch data export let loader = async () => { const response = await fetch("https://jsonplaceholder.typicode.com/posts"); const posts = await response.json(); return posts; }; export default function Posts() { const posts = useLoaderData(); return ( <div> <h1>Posts</h1> <Link to="new">Create New Post</Link> <ul> {posts.map((post) => ( <li key={post.id}> <Link to={`/posts/${post.id}`}>{post.title}</Link> </li> ))} </ul> </div> ); } 
Enter fullscreen mode Exit fullscreen mode

This part highlights Data Loading and Mutations. The loader function fetches data from an API endpoint (https://jsonplaceholder.typicode.com/posts), and the useLoaderData hook accesses this data within the component. It makes data fetching a breeze, integrating seamlessly into the component lifecycle.

Handling Layouts and Links

In Remix, you can define a root component (this is key ⭐️) to handle the layout, including meta tags, links, scripts, and live reload functionality. Here’s how my app/root.jsx looks:

import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration, } from "@remix-run/react"; export const links = () => { return [ { rel: "stylesheet", href: "/styles.css" } ]; }; export default function App() { return ( <html lang="en"> <head> <Meta /> <Links /> </head> <body> <header> <h1>Welcome to the Blog</h1> </header> <nav> <ul> <li><a href="/">Home</a></li> <li><a href="/about">About</a></li> <li><a href="/posts">Posts</a></li> </ul> </nav> <div className="container"> <Outlet /> </div> <ScrollRestoration /> <Scripts /> <LiveReload /> </body> </html> ); } 
Enter fullscreen mode Exit fullscreen mode

This setup shows off Progressive Enhancement and Nested Routing. The Links, Meta, and Scripts components ensure the app is well-structured, SEO-friendly, and progressively enhanced. The Outlet component is used for nested routing, rendering different child components within the main layout.

Lessons Learned

Working on this project, I faced some challenges with environment configuration and resolving module issues. But overcoming these hurdles wasn't tiring at all! Fun experience 😎

Conclusion

This project was more than just building a blog, it was about exploring the capabilities of Remix and React Router and keeping my technical skills sharp. It's a powerful tool that can enhance your development workflow significantly for sure!!

Stay tuned for more updates, and happy coding! πŸš€

Sohini ❀️

Top comments (2)

Collapse
 
mehmoodulhaq570 profile image
Mehmood-Ul-Haq

very well πŸ˜‰

Collapse
 
mannuelf profile image
Mannuel

Nicely done 🀘 thought you might be interested in more Remix content