React-router-dom 6.8.1 и react 18.2.0 <Link> только обновленный URL

Я использую react-router-dom 6.8.1 и react 18.2.0 и пытаюсь настроить маршрутизатор браузера с помощью функций createBrowserRouter() и createRoutesFromElements(). Затем я визуализирую свой браузерный маршрутизатор с помощью компонента <RouterProvider>, и главная страница моего веб-сайта отображается нормально (компонент App работает). По какой-то причине любые компоненты react-router-dom <Link>, которые я помещаю в свои компоненты, отображаются на главной странице, но когда я нажимаю на них, меняется только URL-адрес, а не обновляется пользовательский интерфейс. Странно то, что если я использую <Outlet>, пользовательский интерфейс из дочерних маршрутов будет отображаться, когда я нажимаю на любые ссылки, но это не то, что я хочу. Мне нужно перейти на отдельную страницу.

Здесь я создаю маршрутизатор браузера:

import * as ReactDOM from 'react-dom/client';
import {
    createBrowserRouter,
    createRoutesFromElements,
    Route,
    RouterProvider,
} from 'react-router-dom';

import App from './app/app';
import ParticipantProfile from './app/profiles/participantProfile';

const browserRouter = createBrowserRouter(
    createRoutesFromElements(
        <Route path = "/" element = {<App />}>
            <Route path = "profile" element = {<ParticipantProfile />} />
        </Route>
    )
);

const root = ReactDOM.createRoot(
    document.getElementById('root') as HTMLElement
);

root.render(<RouterProvider router = {browserRouter} />);

Вот где я создаю свой <Link>:

import { Link } from 'react-router-dom';
import { createTheme } from '@mui/material/styles';

const theme = createTheme();

function App() {
    return <Link to = "profile">Profile</Link>;
}

export default App;

Я пробовал визуализировать сам компонент <BrowserRouter> вместо использования createRoutesFromElements, но результаты те же. Изменение пути с profile на /profile тоже ничего не дает.

Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Принципы ООП в JavaScript
Принципы ООП в JavaScript
Парадигма объектно-ориентированного программирования имеет 4 основных принципа,
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
2
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы хотите, чтобы каждый маршрут сопоставлялся с другим компонентом (без вложенности макета), нет необходимости заключать их все в один элемент <Route>.

<>
  <Route path = "/" element = {<App />} />
  <Route path = "/profile" element = {<ParticipantProfile />} />
</>

В качестве альтернативы укажите элемент только на дочернем маршруте.

<Route path = "/">
  <Route index element = {<App />} />
  <Route path = "profile" element = {<ParticipantProfile />} />
</Route>

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