ReactJS Bootstrap Navbar and Routing not working together ReactJS Bootstrap Navbar and Routing not working together reactjs reactjs

ReactJS Bootstrap Navbar and Routing not working together


First of all, in your snippets it doesn't seem like you're wrapping your code in a Router, so you should make sure that you're doing that inside App or in ReactDOM.render:

import { BrowserRouter } from 'react-router-dom';ReactDOM.render(  <BrowserRouter>    <App />  </BrowserRouter>,   rootElement  );

Next, your specific problem is that you're rendering react-bootstrap's Nav.Link instead of react-router's Link component, so the router is not picking up your route changes. Fortunately, react-bootstrap provides a render prop in most of its components to specify which component or element you want to render if you don't want the default. Switch to something like this:

import { Switch, Route, Link } from 'react-router-dom';class Navigation extends Component {  render() {    return (      <div>        <div>          <Navbar>            <Navbar.Brand as={Link} to="/" >React-Bootstrap</Navbar.Brand>            <Navbar.Collapse>              <Nav className="mr-auto">                <NavItem eventkey={1} href="/">                  <Nav.Link as={Link} to="/" >Home</Nav.Link>                </NavItem>              </Nav>              <Form inline>                <FormControl type="text" placeholder="Search" className="mr-sm-2" />                <Button variant="outline-success">Search</Button>              </Form>            </Navbar.Collapse>          </Navbar>        </div>        <div>          <Switch>            <Route exact path='/' component={Home} />            <Route render={function () {              return <p>Not found</p>            }} />          </Switch>        </div>      </div>    );  }}


For those who have a problem with styling Link component from react-router-dom in react-bootstrap navbar, simply add className="nav-link", like this:

<Link to="/" className="nav-link">Home</Link>

instead of

<Nav.Link href="/">Home</Nav.Link>


import ReactDOM from 'react-dom';import { BrowserRouter } from 'react-router-dom';ReactDOM.render(<BrowserRouter><App /></BrowserRouter>,document.getElementById('root'));

and Navbar.js:

import React from 'react';import {Container,Navbar,Nav,NavItem } from 'react-bootstrap';import {Link} from 'react-router-dom';<Nav className="ml-auto"><NavItem>   <Link className="nav-link"   to="/">Home</Link> </NavItem> <NavItem>   <Link  className="nav-link" to="/about">About</Link> </NavItem> <NavItem>    <Link className="nav-link"   to="/contact">Contact</Link> </NavItem> </Nav>

This resolved the: <Link> outside a <Router> error for me.