I have tried using <Switch> and exact after viewing this post: React Router v4 renders multiple routes but it hasn’t resolved my problem, which is that 2 of my components are rendered at the same time when the <Link> function operates.
The code:
import React from "react";
import '../styles/Onboarding.css';
import {Link, Route, BrowserRouter as Router, Switch } from "react-router-dom";
function ComponentA() {
return (
<Router>
<div className="parent">
<h1 className="title">title</h1>
<p className="description">description</p>
<Link exact to="/componentB"><button className="button">enter</button></Link>
<Switch>
<Route exact path="/componentB" component={ComponentB} />
</Switch>
</div>
</Router>
);
}
function ComponentB() {
return (
<div>
Welcome to ComponentB
</div>
)
}
export default ComponentA;
The result is the html of Component A showing up and “Welcome to ComponentB” underneath them. Please help me out with this reaact-router issue
Advertisement
Answer
Contents of ComponentA shows up because ComponentB is now a child route of ComponentA. To render them separately, need a parent component like this:
export default function App() {
return (
<Router>
<Switch>
<Route exact path="/componentA" component={ComponentA} />
<Route exact path="/componentB" component={ComponentB} />
</Switch>
</Router>
);
}