Reputation: 35
I have problem in rendering a component when I click the navbar. So, when I click the Navbar, the component is rendering inside the navbar instead below the navbar. Is there anything I could do to fix this?
This is the App file:
//App.js
import React from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { Header, Content } from './component/Layout/index';
import Films from './container/Films/Films';
import Peoples from './container/Peoples/Peoples';
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
const App = () => {
return (
<BrowserRouter>
<div className='App'>
<Header />
{/* <Content /> */}
<Switch>
<Route path='/films' component={Films} />
<Route path='/peoples' component={Peoples} />
</Switch>
</div>
</BrowserRouter>
);
};
export default App;
This is the navbar file:
//Header.js
import React from 'react';
import { Navbar, NavDropdown, Nav, NavItem } from 'react-bootstrap';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
import Films from '../../container/Films/Films';
import Peoples from '../../container/Peoples/Peoples';
import classes from './Header.module.css';
const Header = () => {
return (
<Router>
<div className={classes.header}>
<Navbar bg='dark' expand='lg'>
<Navbar.Brand href='#home' className='text-white'>
Swapiku
</Navbar.Brand>
<Navbar.Toggle aria-controls='basic-navbar-nav' />
<Nav className='mr-auto text-secondary'>
<Nav.Link className='text-secondary' href='#films'>
<Link to={'/films'}> Films </Link>
</Nav.Link>
<Nav.Link className='text-secondary' href='#people'>
<Link to={'/peoples'}> People </Link>
</Nav.Link>
</Nav>
<Switch>
<Route path='/films' component={Films} />
<Route path='/peoples' component={Peoples} />
</Switch>
</Navbar>
</div>
</Router>
);
};
export default Header;
Any help would be appreciated, thank you
Upvotes: 0
Views: 105
Reputation: 145
Because your route content inside navbar. Try this
<div className={classes.header}>
<Navbar bg='dark' expand='lg'>
<Navbar.Brand href='#home' className='text-white'>
Swapiku
</Navbar.Brand>
<Navbar.Toggle aria-controls='basic-navbar-nav' />
<Nav className='mr-auto text-secondary'>
<Nav.Link className='text-secondary' href='#films'>
<Link to={'/films'}> Films </Link>
</Nav.Link>
<Nav.Link className='text-secondary' href='#people'>
<Link to={'/peoples'}> People </Link>
</Nav.Link>
</Nav>
</Navbar>
<Router>
<Switch>
<Route path='/films' component={Films} />
<Route path='/peoples' component={Peoples} />
</Switch>
</Router>
</div>
Upvotes: 1
Reputation: 1023
You are using the same route code inside your header component too. Remove Router code from Header.js
Please update Header.js
//Header.js
import React from 'react';
import { Navbar, NavDropdown, Nav, NavItem } from 'react-bootstrap';
import { Link } from 'react-router-dom';
import Films from '../../container/Films/Films';
import Peoples from '../../container/Peoples/Peoples';
import classes from './Header.module.css';
const Header = () => {
return (
<div className={classes.header}>
<Navbar bg='dark' expand='lg'>
<Navbar.Brand href='#home' className='text-white'>
Swapiku
</Navbar.Brand>
<Navbar.Toggle aria-controls='basic-navbar-nav' />
<Nav className='mr-auto text-secondary'>
<Nav.Link className='text-secondary' href='#films'>
<Link to={'/films'}> Films </Link>
</Nav.Link>
<Nav.Link className='text-secondary' href='#people'>
<Link to={'/peoples'}> People </Link>
</Nav.Link>
</Nav>
</Navbar>
</div>
);
};
export default Header
Upvotes: 0
Reputation: 1507
Remove Switch from Header.js like below
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
import Films from '../../container/Films/Films';
import Peoples from '../../container/Peoples/Peoples';
import classes from './Header.module.css';
const Header = () => {
return (
<Router>
<div className={classes.header}>
<Navbar bg='dark' expand='lg'>
<Navbar.Brand href='#home' className='text-white'>
Swapiku
</Navbar.Brand>
<Navbar.Toggle aria-controls='basic-navbar-nav' />
<Nav className='mr-auto text-secondary'>
<Nav.Link className='text-secondary' href='#films'>
<Link to={'/films'}> Films </Link>
</Nav.Link>
<Nav.Link className='text-secondary' href='#people'>
<Link to={'/peoples'}> People </Link>
</Nav.Link>
</Nav>
</Navbar>
</div>
</Router>
);
};
export default Header;
Upvotes: 0