In modern web development, creating a responsive navbar with a light/dark mode toggle is an essential feature for enhancing user experience. By leveraging Redux for state management, Tailwind CSS for styling, and React Router for navigation, we can create a dynamic navbar with theme-switching functionality.
Prerequisites
Before we start, ensure you have the following installed:
- Node.js (latest version recommended)
- React (
npx create-react-app my-app) - Redux Toolkit (
npm install @reduxjs/toolkit react-redux) - React Router (
npm install react-router-dom) - Tailwind CSS (
npm install tailwindcss postcss autoprefixer && npx tailwindcss init)
Step 1: Setting Up Redux for Theme Management
Create userSlice.js
<code>import { createSlice } from "@reduxjs/toolkit";
const initialState = {
status: false,
data: "null",
theme: "dark" // Default theme
};
const userSlice = createSlice({
name: "user",
initialState,
reducers: {
themechange: (state) => {
state.theme = state.theme === "dark" ? "light" : "dark";
},
},
});
export const { themechange } = userSlice.actions;
export default userSlice.reducer;</code> Step 2: Implementing the Navbar with Dark Mode Toggle
Create Navbar.js
<code>import { useEffect } from "react";
import { Link } from "react-router-dom";
import { useSelector, useDispatch } from "react-redux";
import { themechange } from "../Utils/userslicer";
export default function Navbar() {
const dispatch = useDispatch();
const theme = useSelector((state) => state.user.theme);
const darkMode = theme === "dark";
useEffect(() => {
document.documentElement.classList.remove("dark", "light");
document.documentElement.classList.add(theme);
}, [theme]);
return (
<nav className="w-full p-4 bg-white dark:bg-black flex justify-between items-center rounded-full shadow-md dark:shadow-lg fixed top-5 left-0 right-0 z-50 mx-auto max-w-7xl px-6">
<div className="flex items-center gap-2">
<img src="/logo.png" alt="DevStudio Logo" className="w-8 h-8 dark:invert" />
<span className="text-black dark:text-white font-semibold text-lg">DevStudio</span>
</div>
<div className="flex gap-6">
<Link to="#" className="text-gray-700 dark:text-gray-300 hover:underline">Services</Link>
<Link to="#" className="text-gray-700 dark:text-gray-300 hover:underline">Products</Link>
<Link to="#" className="text-gray-700 dark:text-gray-300 hover:underline">Pricing</Link>
</div>
<div className="flex items-center gap-4">
<button className="bg-black text-white dark:bg-white dark:text-black px-6 py-2 rounded-full font-semibold">Book a call</button>
<button onClick={() => dispatch(themechange())}>{darkMode ? "☀️" : "🌙"}</button>
</div>
</nav>
);
}</code> Step 3: Applying Tailwind CSS Dark Mode
Configure tailwind.config.js
<code>module.exports = {
darkMode: "class", // Enable class-based dark mode
content: ["./src/**/*.{js,jsx,ts,tsx}"],
theme: {
extend: {},
},
plugins: [],
};</code>Step 4: Routing with React Router
<code>import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import Navbar from "./components/Navbar";
function App() {
return (
<Router>
<Navbar />
<Routes>
<Route path="/" element={<h1>Home</h1>} />
<Route path="/services" element={<h1>Services</h1>} />
<Route path="/products" element={<h1>Products</h1>} />
</Routes>
</Router>
);
}
export default App;</code>Conclusion
By following this guide, you’ve successfully built a responsive navbar with a light/dark mode toggle using Redux Toolkit, Tailwind CSS, and React Router. This implementation ensures:
- ✅ Efficient state management using Redux
- ✅ SEO-friendly navigation with React Router
- ✅ Smooth theme switching with Tailwind CSS
By implementing these best practices, your website will provide a better user experience and improve search engine rankings (SEO) with fast-loading, accessible, and responsive UI components.