ReactJS Bootstrap Navbar and Routing not working together

后端 未结 4 450
借酒劲吻你
借酒劲吻你 2020-12-13 19:29

I am trying to create a simple Webapp using ReactJS, and I wanted to use the Navbar provided by React-Bootstrap.

I created a Navigation.js

相关标签:
4条回答
  • 2020-12-13 19:48

    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>

    0 讨论(0)
  • 2020-12-13 19:54

    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>
        );
      }
    }
    
    0 讨论(0)
  • 2020-12-13 20:01

    i think you forgot to include bootstrap css, refer to the stylesheets section of the following doc

    https://react-bootstrap.github.io/getting-started/introduction/

    or just add the following to ur index.html

    <link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css"
      integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS"
      crossorigin="anonymous"
    />
    
    0 讨论(0)
  • 2020-12-13 20:03
    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.

    0 讨论(0)
提交回复
热议问题