Я пытаюсь использовать Link в компоненте за пределами маршрутизатора в React, но получаю сообщение об ошибке:
You should not use outside a
<Router>
Я хочу отобразить свой компонент приложения, который содержит все необходимые подкомпоненты, и компоненты HeaderIcons, которые должны отображаться на каждой странице вверху. компонент HeaderIcons содержит ссылку на определенный маршрут.
Это метод рендеринга в приложении:
render() {
return (
<Router history = {browserHistory}>
<div>
<Route onEnter = {this.onRouteUpdate.bind(this)} exact path = "" component = {Configration} />
<Route onEnter = {this.onRouteUpdate.bind(this)} path = "/PersonalData" component = {Headerlayout} />
</div>
</Router>
);
}
onRouteUpdate(routerState) {
window.scrollTo(0, 0);
sendLocation(routerState.location);
}
ReactDom.render(<App />, document.getElementById("content"));
ReactDom.render(<HeaderIcons />, document.getElementById("configuration_icons"));
А это ссылка в HeaderIcons:
<Link
to = "/PersonalData"
className = "icon"
onMouseOver = {this.onmouseoverHandler}
onMouseOut = {this.onmouseooutHandler}>
<img src = "/static/images/user.png" alt = "User" />
</Link>
Есть ли способ добиться этого с помощью React Router v4?
Не забудьте использовать React.Fragment :)
Вы импортируете ссылку из «react-router-dom»?
спасибо за ответы. единственный способ - реструктурировать приложение. @ravibagul91 да :)





Вы можете следовать следующему подходу в структурировании своего приложения. (с React-маршрутизатором)
import { BrowserRouter, Switch, Route } from 'react-router-dom';
// in render method of your App component
<BrowserRouter>
<div className = "app">
<HeaderComponentWithLinks> // <- see it under BrowserRouter component
<div className = "content">
<Switch>
<Route exact path = "/" component = {HomePage} />
<Route path = "/about" component = {AboutPage}/>
</Switch>
</div>
</div>
</BrowserRouter>
Теперь вы не увидите ошибки.
вам нужно изменить структуру приложения, поставить
HeaderIconsв самом приложении, внутриRouter, вот так:<Router><div>< HeaderIcons /> /* all the routes here*/ </div></Router>. иначе маршрутизация не будет работать.