1

I'm working on a project and I want it to redirect to different pages when clicking on links in my project, but when I click, the address bar changes but it doesn't redirect to that page, I also have to refresh. For example:

This is my App Component:

import Hero from './components/Hero'
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import ContactPage from './components/ContactPage';
import Solar from './components/Solar';
import Navbar from './components/Navbar';
import Wind from './components/Wind';
import Mission from './components/Mission'
import Vision from './components/Vision'
import Projects from './components/Projects';

function App() {
  return (
    <BrowserRouter>
      <Navbar />
      <Switch>
        <Route exact path='/' component={Hero} />
        <Route path='/contact' component={ContactPage} />
        <Route path='/solar' component={Solar} />
        <Route path='/wind' component={Wind} />
        <Route path='/mission' component={Mission} />
        <Route path='/vision' component={Vision} />
        <Route path='/projects' component={Projects} />
      </Switch>
    </BrowserRouter>
  );
}

export default App;

Is it a bug? I can't figure out what I'm doing wrong.

This is my Navbar component:

import React, { useEffect, useState } from 'react'
import { AiOutlineMenu, AiOutlineClose, AiOutlineDown } from 'react-icons/ai'
import { motion } from 'framer-motion'
import { useOnHoverOutside } from '../hooks/useOnHoverOutside'
import { Link } from 'react-router-dom'

const Navbar = () => {
  const [nav, setNav] = useState(false)
  const [color, setColor] = useState('transparent')
  const [textColor, setTextColor] = useState('white')
  const [isAboutUsMenuDropdown, setIsAboutUsMenuDropDown] = useState(false)
  const [isProjectsMenuDropdown, setIsProjectsMenuDropDown] = useState(false)

  const handleNav = () => {
    setNav(!nav);
  }

  const closeHoverMenu = () => {
    setIsAboutUsMenuDropDown(false);
    setIsProjectsMenuDropDown(false)
  }

  useOnHoverOutside(closeHoverMenu) // Call the hook

  useEffect(() => {
    const changeColor = () => {
      if (window.scrollY >= 90) {
        setColor('#ffffff')
        setTextColor('#006400')
      } else {
        setColor('transparent')
        setTextColor('#ffffff')
      }
    }
    window.addEventListener('scroll', changeColor)
  }, [])

  return (
    <motion.nav
      animate={{ backgroundColor: `${color}` }}
      initial={{ backgroundColor: 'transparent' }}
      className='fixed left-0 top-0 w-full z-10 ease-in duration-300'
    >
      <div className='max-w-[1240px] m-auto flex justify-between items-center p-4 text-white'>
        <a to="/">
          <img src={require("../images/calogo.png")} className="w-20 h-20" alt="/" />
        </a>
        <ul
          style={{ color: `${textColor}` }}
          className='hidden sm:flex font-semibold'
        >
          <li className='p-4' onMouseOver={() => setIsAboutUsMenuDropDown(true)} onMouseOut={() => setIsAboutUsMenuDropDown(false)}>
            <a href='/' className='inline-flex'>About Us <AiOutlineDown className='ml-2 mt-1' /></a>
            {isAboutUsMenuDropdown && (
              <ul className="absolute z-10 bg-gray-600/60 text-white rounded py-2 mt-2" style={{ animation: "slideDown 0.3s ease-out forwards" }}>
                <li className="py-1">
                  <Link to="/mission" className="block px-4 py-1 text-white hover:bg-gray-500">
                    Mission
                  </Link>
                </li>
                <li className="py-1">
                  <Link to="/vision" className="block px-4 py-1 text-white hover:bg-gray-500">
                    Vision
                  </Link>
                </li>
              </ul>
            )}
          </li>
          <li className='p-4' onMouseOver={() => setIsProjectsMenuDropDown(true)} onMouseOut={() => setIsProjectsMenuDropDown(false)}>
            <Link to='/projects' className='inline-flex'>Projects <AiOutlineDown className='ml-2 mt-1' /></Link>
            {isProjectsMenuDropdown && (
              <ul className="absolute z-10 bg-gray-600/60 text-white rounded py-2 mt-2">
                <li className="py-1">
                  <Link to="/solar" className="block px-4 py-1 text-white hover:bg-gray-500">
                    Solar
                  </Link>
                </li>
                <li className="py-1">
                  <Link to="/wind" className="block px-4 py-1 text-white hover:bg-gray-500">
                    Wind
                  </Link>
                </li>
              </ul>
            )}
          </li>
          <li className='p-4'>
            <Link to='/contact'>Contact</Link>
          </li>
        </ul>

        {/* Mobile Button */}
        <div onClick={handleNav} className='block sm:hidden z-10'>
          {nav ? (
            <AiOutlineClose size={20} style={{ color: `${textColor}` }} />
          ) : (
            <AiOutlineMenu size={20} style={{ color: `${textColor}` }} />
          )}
        </div>
        {/* Mobile Menu */}
        <div className={nav
          ? 'sm:hidden absolute top-0 left-0 right-0 bottom-0 flex justify-center items-center w-full h-screen bg-black text-center ease-in duration-300'
          : 'sm:hidden absolute top-0 left-[-100%] right-0 bottom-0 flex justify-center items-center w-full h-screen bg-black text-center ease-in duration-300'}
        >
          <ul>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#aboutus'>About Us</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#mission'>Mission</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#vision'>Vision</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#projects'>Projects</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#solar'>Solar</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#wind'>Wind</a>
            </li>
            <li className='p-4 text-4xl hover:text-gray-500'>
              <a href='/#contact'>Contact</a>
            </li>
          </ul>
        </div>
      </div>
    </motion.nav>
  )
}

export default Navbar
Drew Reese
  • 165,259
  • 14
  • 153
  • 181
  • What specific versions of `react` and `react-router-dom` are installed (*check by running `npm list react react-router react-router-dom` in the project directory*), and are you using a `React.StrictMode` component? Does this help answer your question? https://stackoverflow.com/questions/71832720/link-tag-inside-browserrouter-changes-only-the-url-but-doesnt-render-the-compo/71833424#71833424 – Drew Reese Feb 16 '23 at 22:10
  • 1
    "react": "^18.2.0","react-dom": "^18.2.0","react-router-dom": "^5.2.0", yes I'm using React.StrictMode – Egemen Özyürek Feb 16 '23 at 22:15
  • Bump to at least `react-router-dom@5.3.3` to fix the issue between RRD, React18, and the `StrictMode` component. – Drew Reese Feb 16 '23 at 22:17
  • OMG, you saved my life !!! God bless you !!! – Egemen Özyürek Feb 16 '23 at 22:19

0 Answers0