Home > front end >  No routes matched location "/"
No routes matched location "/"

Time:12-21

My React app is giving me the error No routes matched location "/"

My App.js looks like:

import Form from './components/Form';
import NavMenu from './components/NavMenu';
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';

function App() {

  // Irrelevant code
  
  return (
    <Router>
      <div>
        <NavMenu />
        <Routes>
          <Route path="/:nav_string" element={<Form />}></Route>
        </Routes>
      </div>
    </Router>
  );
}

export default App; 

Any thoughts why this is happening?

I got rid of the error, although it's not a clean solution. I created a new component Home.js, added it to App.js with a route of "/" :

return (
  <Router>
    <div className="content">
      <NavMenu response={response}/>
      <Routes>
        <Route path="/" element={<Home />}></Route> // Added home element
        <Route path="/:nav_string" element={<Form response={response} />}></Route>
      </Routes>
    </div>
  </Router>
);

Although I'm not a big fan of this solution because Home.js returns null. I just created it to get rid of this warning. What can someone do if they don't actually need need a route with a path matching / ?

CodePudding user response:

If you don't really need to render anything on the "/" path you could render a redirect to the form's route, perhaps with some default value.

Example:

return (
  <Router>
    <div className="content">
      <NavMenu response={response} />
      <Routes>
        <Route path="/" element={<Navigate to="/someDefaultValue" replace />} />
        <Route path="/:nav_string" element={<Form response={response} />}> />
      </Routes>
    </div>
  </Router>
);

An alternative could also be to render the Form component on both routes. RRD is optimized such that the Form component remains mounted while navigating between the routes or while the nav_string param value changes.

Example:

return (
  <Router>
    <div className="content">
      <NavMenu response={response} />
      <Routes>
        <Route path="/" element={<Form response={response} />} />
        <Route path="/:nav_string" element={<Form response={response} />}> />
      </Routes>
    </div>
  </Router>
);

Just make sure that Form can handle a potentially undefined nav_string param value. You could provide a fallback value.

const { nav_string = "someDefaultValue" } = useParams();

CodePudding user response:

the format for "/:nav_string" is a path parameters, there is not "/" path 
try type in for example "/Product", then it solved

CodePudding user response:

This should help:

<BrowserRouter>
 <NavMenu/>
   <Routes>
        <Route path="/" element={<Form/>}></Route>
   <Routes/>
<BrowserRouter/>
  • Related