React Router Dom Link в другом компоненте

Я новичок в React в целом, поэтому заранее извиняюсь, если есть простое решение.

У меня есть две составляющие:

Панель управления
--Боковая панель (вызывается в панели инструментов)

У меня есть путь, настроенный на панели инструментов, и ссылки на моей боковой панели. Когда я нажимаю ссылку, URL-адрес меняется, но панель инструментов не перерисовывается, поэтому она меняется только при обновлении страницы. Мой вопрос: есть ли способ через реактивный маршрутизатор, с помощью которого я могу настроить свою панель инструментов для повторного рендеринга при нажатии ссылки на боковой панели?

импорт

import { BrowserRouter, Route, Link } from 'react-router-dom';

Компонент приборной панели:

<DashboardSidebar />
<BrowserRouter>
    <div>
        <Route exact path = "/" component = {DashboardLanding} />
        <Route path = "/profile" component = {ViewUsers} />
        <Route path = "/project" component = {ViewProjects} />
    </div>
</BrowserRouter>

Компонент боковой панели информационной панели

<BrowserRouter>
    <Link
        to = "/"
        className = "nav-link" 
        onClick = {this.navigation} 
    >
    Link</Link>
    <Link
        to = "/profile"
        className = "nav-link" 
        onClick = {this.navigation} 
    >
    Link</Link>
    <Link
        to = "/project"
        className = "nav-link" 
        onClick = {this.navigation} 
    >
    Link</Link>
<BrowserRouter>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
5
0
4 173
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Нет необходимости в другом компоненте SideBar. оберните его div или, возможно, фрагментом.

Я переместил боковую панель над приборной панелью, как вы предложили, но, к сожалению, компонент по-прежнему не отображается.

eoan 12.03.2019 18:44

У вас все еще есть два <BrowserRouter> в вашем коде?

Prithwee Das 12.03.2019 18:46

Да, должны ли они оба быть вложены в один и тот же <BrowserRouter>?

eoan 12.03.2019 19:03

Нет, вам нужны только ваши теги <Route> под <BrowserRouter>, а не <Link>, ссылки могут быть где угодно в вашем приложении, поэтому просто удалите <BrowserRouter> вокруг вашего тега <Link> и поместите <div> вместо

Prithwee Das 12.03.2019 19:05

Когда я удаляю теги <BrowserRouter> вокруг <Link>, все приложение ломается, и я получаю эту ошибку: You should not use <Link> outside a <Router>

eoan 12.03.2019 19:13

Да, как я уже сказал, немного сложно размещать коды в комментариях, я просто поделюсь с вами сутью

Prithwee Das 12.03.2019 19:16
gist.github.com/prithweedas/2ceffa8d58fb9dbc4e6c3543ff024ea6 Вот ссылка на суть
Prithwee Das 12.03.2019 19:18

Спасибо за суть, которая была действительно полезной, но возвращает новую ошибку. A <Router> may have only one child element Вот мой компонент панели инструментов: gitlab.mi.hdm-stuttgart.de/eo023/client-management-system/bl‌​ob/… Компонент боковой панели gitlab.mi.hdm-stuttgart.de/eo023/client-management-system/bl‌​ob/…

eoan 12.03.2019 19:27

Да, это был мой недостаток, забыл об этом, обновил суть, если <></> этот синтаксис не работает для вас, просто используйте <div> вместо этого

Prithwee Das 12.03.2019 19:31

Добро пожаловать, если это помогло вам, пожалуйста, проголосуйте и примите ответ, чтобы помочь другим определить правильный ответ.

Prithwee Das 12.03.2019 19:41
  1. Возможно проблема в: последняя строка кода BrowserRouter у вас открытый тег, а не закрытый.

  2. Второе решение может заключаться в том, что попробуйте изменить оболочку BrowserRouter с тегом div.

Извините, первая проблема только из-за того, что я сделал ошибку, копируя и вставляя более аккуратный код! Я также сделал, как @prithweeds предложил ниже, и переместил весь код компонента боковой панели на свою панель инструментов, однако компонент по-прежнему не перерисовывается.

eoan 12.03.2019 18:22

BrowserRouter должен был иметь компонент DashboardboardSidebar внутри него, и все они были заключены в один дочерний элемент.

<BrowserRouter>
<>
<DashboardSidebar />
<div>
    <Route exact path = "/" component = {DashboardLanding} />
    <Route path = "/profile" component = {ViewUsers} />
    <Route path = "/project" component = {ViewProjects} />
</div>
</>

эоан! Вот как я использую эту логику.

import { BrowserRouter as Router } from 'react-router-dom';

function ParentComponent() {
  return(
    <Router>
       <div>
         <SomeNavBar />
         <SomeFeed />
       </div>
    </Router>
  )
};

export default ParentComponent;

----------------------------------------------------------------------------

import { Link } from 'react-router-dom';

function SomeNavBar(){
  return(
    <Router>
       <div>
         <Link to = "/">Home</Link>
         <Link to = "/about"></Link>>
       </div>
    </Router>
  )
};

export default SomeNavBar;

----------------------------------------------------------------------------

import { Switch, Route } from 'react-router-dom';

function SomeFeed(){
  return(
    <Switch>
       <Route path = "/" exact>
            <PostUpdates />
            <SomeOtherPost />
            ...
       </Route> 
       <Route path = "/about" >
            <Welcome />
            <Description />
            ...
       </Route> 
    </Switch>
  )
};

export default SomeFeed;

Просто оберните родительский компонент.

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