Есть ли альтернатива использованию <Link> вне <Router> с реакцией?

Я пытаюсь использовать 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?

вам нужно изменить структуру приложения, поставить HeaderIcons в самом приложении, внутри Router, вот так: <Router><div>< HeaderIcons /> /* all the routes here*/ </div></Router>. иначе маршрутизация не будет работать.

Mayank Shukla 03.05.2019 13:12

Не забудьте использовать React.Fragment :)

Doğancan Arabacı 03.05.2019 13:13

Вы импортируете ссылку из «react-router-dom»?

ravibagul91 03.05.2019 13:19

спасибо за ответы. единственный способ - реструктурировать приложение. @ravibagul91 да :)

Siraj'eddine Benzineb 03.05.2019 14:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
4
2 313
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете следовать следующему подходу в структурировании своего приложения. (с 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>

Теперь вы не увидите ошибки.

Другие вопросы по теме