I’m trying to make a navbar using react , but although the link has changed , the content never being changed !
routes in my App.js :
JavaScript
x
22
22
1
import { BrowserRouter as Router , Routes, Route } from "react-router-dom";
2
import Layout from './hocs/Layout';
3
import Home from './components/Home';
4
import Blog from './components/Blog';
5
import BlogDetail from './components/BlogDetail';
6
import Category from './components/Category';
7
8
const App = () => (
9
<Router>
10
<Layout>
11
<Routes>
12
<Route exact path = '/' component = {Home} />
13
<Route exact path = '/blog' component = {Blog} />
14
<Route exact path = '/category/:id' component = {Category} />
15
<Route exact path = '/blog/:id' component = {BlogDetail} />
16
</Routes>
17
</Layout>
18
</Router>
19
);
20
21
export default App ;
22
Home.js file , the content “Home” doesn’t appear , although the link changed:
JavaScript
1
12
12
1
import React from "react";
2
3
const Home = () => (
4
<>
5
<div>
6
Home
7
</div>
8
</>
9
);
10
11
export default Home;
12
Also the content of Blog.js file doesn’t appear “same as Homel.js”:
JavaScript
1
8
1
import React from "react";
2
3
const Blog = () => (
4
<div>
5
blog
6
</div>
7
);
8
code of navbar Navbar.js using bootstrap :
JavaScript
1
35
35
1
import React from "react";
2
import {Link, NavLink} from 'react-router-dom';
3
4
const Navbar = () => (
5
<div>
6
<nav className="navbar navbar-expand-lg navbar-light bg-light">
7
<div className="container-fluid">
8
<Link className="navbar-brand" to="/">Around the world </Link>
9
<button className="navbar-toggler"
10
type="button"
11
data-bs-toggle="collapse"
12
data-bs-target="#navbarNav"
13
aria-controls="navbarNav"
14
aria-expanded="false"
15
aria-label="Toggle navigation">
16
<span className="navbar-toggler-icon"></span>
17
</button>
18
<div className="collapse navbar-collapse" id="navbarNav">
19
<ul className="navbar-nav">
20
<li className="nav-item">
21
<NavLink className="nav-link active" aria-current="page" exact to = '/'>home</NavLink>
22
</li>
23
<li className="nav-item">
24
<NavLink className="nav-link" exact to = '/blog'>Blog</NavLink>
25
</li>
26
</ul>
27
</div>
28
</div>
29
</nav>
30
31
</div>
32
);
33
34
export default Navbar;
35
Layout.js:
JavaScript
1
12
12
1
import React from "react";
2
import Navbar from '../components/Navbar';
3
4
const Layout = (props) => (
5
<div>
6
<Navbar />
7
{props.children}
8
</div>
9
);
10
11
export default Layout;
12
Advertisement
Answer
Nothing is rendered because you are not correctly using the Route
component’s element
prop to render the routed components. In react-router-dom@6
gone are the component
and render
and children
render function props, replaced by a single element
prop taking a ReactElement
, a.k.a. JSX.
JavaScript112121declare function Route(
2props: RouteProps
3): React.ReactElement | null;
4
5interface RouteProps {
6caseSensitive?: boolean;
7children?: React.ReactNode;
8element?: React.ReactElement | null; // <-- routed component
9index?: boolean;
10path?: string;
11}
12
JavaScript
1
13
13
1
const App = () => (
2
<Router>
3
<Layout>
4
<Routes>
5
<Route path='/' element={<Home />} />
6
<Route path='/blog' element={<Blog />} />
7
<Route path='/category/:id' element={<Category />} />
8
<Route path='/blog/:id' element={<BlogDetail />} />
9
</Routes>
10
</Layout>
11
</Router>
12
);
13