Согласно документам :
<Switch>
не требуется для группировки <Route>s
, но может быть весьма полезным.<Switch>
будет перебирать все свои дочерние элементы <Route>
и отображать только первый, соответствующий текущему местоположению.Это помогает, когда пути нескольких маршрутов совпадают с одним и тем же именем пути, при анимации переходов между маршрутами и при определении, когда ни одно из маршрутов не соответствует текущему местоположению (чтобы можно было отобразить компонент «404»).
Вам необходимо добавить <switch>your routes here</switch>
для точного отображения одного компонента.
Примечание :: Также в вашем фрагменте кода вы используете один и тот же path
для всех маршрутов.Вам нужно изменить path
для каждого компонента, иначе для каждого пути будет отображаться только первый компонент.
ОБНОВЛЕНИЕ
Предположим, у вас более 1компоненты для отображения на одном маршруте, затем создайте компонент контейнера и импортируйте все другие компоненты в этот компонент контейнера, например,
import React from 'react';
import HeroImageComponent from './HeroImageComponent';
import SideBarComponent from './SideBarComponent';
import ArticleComponent from './ArticleComponent';
import FooterComponent from './FooterComponent';
class ContainerComponent extends React.Component{
render(){
return(
<div>
<HeroImageComponent />
<SideBarComponent />
<ArticleComponent />
<FooterComponent />
</div>
)
}
}
export default ContainerComponent;
Тогда ваш маршрут будет
function App() {
return (
<div className="App">
<HeaderComponent></HeaderComponent> //This can be added to HomeComponent
<Router>
<Route exact path="/" component={HomeComponent}></Route>
<Route path="/upload" exact component={UploadFileComponent} />
</Router>
</div>
);
}
Ваш компонент заголовкадолжно быть,
class HeaderComponent extends Component {
render() {
return (
<Router>
<div className="header">
<div className="container">
<div className="header-content">
<img src={logo} alt="logo"></img>
<div className="nav-links" >
<ul >
<li>Home</li>
<li>About</li>
<li>Services</li>
<li><NavLink activeClassName="active" to="/upload" >Upload</NavLink></li>
{/* <li><Link to="/upload">Upload</Link></li> */}
</ul>
</div>
</div>
</div>
</div>
</Router>
);
}
}