'React Router not working with Github Pages

If you go on my site, https://amodhakal.github.io/portfolio/, then you would realize that that the site is only showing the navbar, not the home page. It only shows the home page when the home tab is clicked, then if you click my navbar brand, it says 404. This website worked on a create-react-app with npm start, but it doesn't work here, nor on the build. I don't know what is wrong with the app, maybe the router setup is messed up, I don't know. I have linked the App and Index pages where I have the router setup. If you need any more information, here's the github link: https://github.com/amodhakal/portfolio, or just ask me for more information.

Thank You

Index

import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom'
import App from './App';
import './styles/index.css';

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

App

import { Routes, Route } from "react-router-dom";
import Navbar from "./components/Navbar";
import About from "./routes/About";
import Contact from "./routes/Contact";
import Home from "./routes/Home";
import Project from "./routes/Project";

const App = () => {
  return (
    <>
      <Navbar />
      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/about" element={<About />}></Route>
        <Route path="/project" element={<Project />}></Route>
        <Route path="/contact" element={<Contact />}></Route>
      </Routes>
    </>
  );
};

export default App;


Solution 1:[1]

  1. If deploying to GitHub, ensure there is a "homepage" entry for where you are hosting it in Github.

    Example:

     "homepage": "https://github.com/amodhakal/portfolio",
    
  2. Switch to the HashRouter since GitHub pages doesn't support the tech used by the BrowserRouter.

    index

     import React from 'react';
     import ReactDOM from 'react-dom/client';
     import { HashRouter } from 'react-router-dom'
     import App from './App';
     import './styles/index.css';
    
     ReactDOM.createRoot(document.getElementById('root')).render(
       <React.StrictMode>
         <HashRouter>
           <App />
         </HashRouter>
       </React.StrictMode>
     );
    

For more details see the create-react-app docs for deploying to GitHub Pages and notes on client-side routing.

Solution 2:[2]

Figured it out. It's because of the url structure.

https://umair-mirza.github.io/safetyapp/

means you have to define a route for /safetyapp

like this:

<Route path='/safetyapp' element={<Home />} />

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Drew Reese
Solution 2 Umair