Search code examples
reactjsreact-routerreact-router-domreact-dom

HashRouter No routes matched location


I am currently trying to implement a hashrouter and Im getting the error: No routes matched location "register" going to the url localhost:3000/#register

My index.js:

      import React from 'react';
import ReactDOM from 'react-dom';
import {HashRouter} from 'react-router-dom'
// import './bootstrap/dist/css/bootstrap.min.css';
// import './bootstrap/dist/js/bootstrap.min';
import reportWebVitals from './reportWebVitals';
import App from "./App";

ReactDOM.render(

    <HashRouter>
          <App />
  </HashRouter>
            ,
  document.getElementById('root')
);


reportWebVitals(console.log);

My App.js:

import React, {Component, useEffect, useState} from 'react';
import {Routes, Route} from 'react-router'
import * as $ from 'jquery';
import Web3 from 'web3';
import 'bootstrap/dist/css/bootstrap.min.css';
// import './sketchy.min.css';

import { Navbar, Nav, Container, NavDropdown, Form,FormControl, Button, Row, Col, PageHeader } from 'react-bootstrap';

    function App() {
 
  return(
      <>
        <NavDom/>
          <Routes>
              <Route path='/register' element={<RegisterFormDom/>}/>
              <Route path='/' element={<HomeDom/>}/>

          </Routes>
      </>
  );

}

const HomeDom = ()=>{
  return(
     <Row>
        <Col>


        </Col>
      </Row>
  );
}
const NavDom = ()=>{//
  return(
      <Navbar collapseOnSelect expand="lg" bg="dark" variant="dark">
          <Container>
              <Navbar.Brand href="/">Bulls Marketplace</Navbar.Brand>
              <Navbar.Toggle aria-controls="responsive-navbar-nav" />
              <Navbar.Collapse id="responsive-navbar-nav">
                  <Nav className="me-auto">
                      <Nav.Link href="#register">Register</Nav.Link>
                      <Nav.Link href="#wallet">Wallet</Nav.Link>
                      <Nav.Link href="#wallet">My Services</Nav.Link>
                      <Nav.Link href="/store">Store</Nav.Link>
                  </Nav>
                  <Nav>
                      <Nav.Link to="#about">About</Nav.Link>

                  </Nav>
              </Navbar.Collapse>
          </Container>
      </Navbar>
  );
}
const RegisterFormDom = ()=>{
  return(
      <Row>
        <Col>
          <h3 className="sub-header">Register Player</h3>
          <form className="form-inline" role="form">
            <div className="form-group">
              <table>
                <tr>
                  <td><label htmlFor={"username"}>Username:</label></td>
                  <td>
                    <input className={"form-control"} id={"username"} name={"username"}/>

                  </td>
                </tr>
              </table>
            </div>
            <a href={"#"} className={"btn btn-primary"}>Register</a>
          </form>
        </Col>
      </Row>
  );
}

I also tried this:

     return(
      <>
        <NavDom/>
          <Routes>
              <Route path='#register' element={<RegisterFormDom/>}/>
              <Route path='/' element={<HomeDom/>}/>

          </Routes>
      </>
  );

with a hash instead of a '/'. But Im getting the same result.

Dont mind the web3 stuff, that all works.

Is HashRouter still a thing in v6 of react-router-dom?


Solution

  • The links in NavDom should be react-router-dom links and they should link to pages the app is rendering. The URL will end up something like localhost:3000/#/register.

    const NavDom = () => {
      return (
        <Navbar collapseOnSelect expand="lg" bg="dark" variant="dark">
          <Container>
            <Navbar.Brand as={Link} to="/">Bulls Marketplace</Navbar.Brand>
            <Navbar.Toggle aria-controls="responsive-navbar-nav" />
            <Navbar.Collapse id="responsive-navbar-nav">
              <Nav className="me-auto">
                <Nav.Link as={Link} to="/register">Register</Nav.Link>
                <Nav.Link as={Link} to="/wallet">Wallet</Nav.Link>
                <Nav.Link as={Link} to="/wallet">My Services</Nav.Link>
                <Nav.Link as={Link} to="/store">Store</Nav.Link>
              </Nav>
              <Nav>
                <Nav.Link as={Link} to="/about">About</Nav.Link>
              </Nav>
            </Navbar.Collapse>
          </Container>
        </Navbar>
      );
    };
    

    ...

    <NavDom/>
    <Routes>
      <Route path="/register" element={<RegisterFormDom />} />
      <Route path="/" element={<HomeDom />} />
    </Routes>
    

    Edit hashrouter-no-routes-matched-location