React Router 4 - Проблемы с отображением вложенной ссылки

Я новичок в React-сцене и примерно через неделю поисков решений и руководств не смог решить эту проблему.

У меня следующая структура с Ожидаемые результаты:

  • «Главный» компонент (в настоящее время index.js) имеет навигационную ссылку.
  • Указанная ссылка указывает на компонент под названием «Пользователи», который отображает список пользователей.
  • Щелчок по ссылке пользователя должен заменить список пользователей «подробным представлением» этого пользователя (в настоящее время указано «Проверка маршрута»), аналогично тому, как если бы вы были на Facebook и выбрали «профиль», вы перейдете на другую страницу.

Я следил за этим руководством: https://reacttraining.com/react-router/web/example/basic, за исключением использования параметров "match" на данный момент b / c, кажется, я неправильно использую их в codeandbox, в котором я тоже новичок.

Фактические результаты

При нажатии на первую ссылку «Список пользователей» отображается точный список, но также отображается компонент «UserDashboard» под списком.

При нажатии на одну из пользовательских ссылок URL-адрес обновляется, но вы попадаете на пустую страницу.

Код как для index.js:

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route, Switch, Link } from "react-router- 
dom";
import Users from "./Users";
import UserDashboard from "./UserDashboard";

import "./styles.css";

function App() {
  return (
    <Router>
      <div className = "App">
        <ul>
          <li>
            <Link to = "/users/">Users List</Link>
          </li>
        </ul>

        <Switch>
          <Route exact path = "/users/" component = {Users} />          
        </Switch>
      </div>
    </Router>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Users.js

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route, Switch, Link } from "react-router- 
dom";
import UserDashboard from "./UserDashboard";

function Users({ match }) {
  return (
    <div>
      <ul>
        <li>
          <Link to = "/1">John Smith</Link>   
        </li>
        <li>
          <Link to = "/2">Alex Rogers</Link>
        </li>
        <li>
          <Link to = "/3">Ignacio Don</Link>
        </li>
      </ul>
      <Route path = "/:id" component = {UserDashboard} />
    </div>
  );
}

export default Users;

UserDashboard.js

import React from "react";
import ReactDOM from "react-dom";

function UserDashboard({ match }) {
  return (
    <div>
      <h3>Route Test</h3>
      <h3>{match.params.topicId}</h3>
    </div>
  );
}

export default UserDashboard;

Идея, конечно же, состоит в том, чтобы производить все это с реальными данными с использованием graphQL, но пока я не исправлю эту (вероятно, очевидную) проблему, я не могу продолжить.

Ссылка на демонстрационную версию кода выше:

https://codesandbox.io/embed/oxx1v2ylyq

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

Ответы 1

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

В index.js я изменил пару строк,

<Link to = "/users">Users List</Link>

и

<Route path = "/users" component = {Users} />

Выделение точного маршрута и удаление косых черт в конце пользователей.

В Users.js я изменил ваши ссылки и маршруты, чтобы они были похожи на пример обучения реакции.

<Link to = {`${match.url}/1`}>John Smith</Link>
<Route path = {`${match.path}/:id`} component = {UserDashboard} />

А в UserDashboard.js я изменил

<h3>{match.params.topicId}</h3>

к

<h3>{match.params.id}</h3>

Я думаю, что произошло то, что маршрутизатор соответствовал / users в вашем операторе switch из-за свойства точный. Я надеюсь, что это именно то поведение, которое вы искали.

Редактировать

Чтобы компоненты отключились при нажатии на перемещение пользователя

<Route path='/users/:id' component = {UserDashboard} />

От Users.js до index.js внутри компонента Switch и ниже

<Route exact path = "/users" component = {Users} />

Обратите внимание, что точный вернулся в маршрут / users. Это обеспечит соответствие маршрута / users.

Близко, то, что мне остается, это ссылка «Список пользователей», а также сам список пользователей, а затем компонент «UserDashboard», отображаемый под ним вместо «новой» страницы с визуализированным компонентом информационной панели. Некоторые из этих исправлений определенно продвинули меня вперед. Обновленная версия: codeandbox.io/embed/oxx1v2ylyq

David Morin 29.11.2018 20:04

Итак, вы хотите, чтобы UserDashboard заменял UserList, когда вы щелкаете по отдельному пользователю?

seanulus 29.11.2018 20:05

Да, все, я отредактирую свой вопрос, чтобы было понятнее.

David Morin 29.11.2018 20:09

Отредактировал ответ. Я думаю, это должно дать вам правильное поведение сейчас.

seanulus 29.11.2018 20:24

Да, это исправлено. Мой код начинался так на прошлой неделе, я делал так много обходных путей, пытаясь разобраться в этом, я не могу точно сказать, в чем заключалась исходная проблема, но готов поспорить, что это были косые черты.

David Morin 29.11.2018 20:39

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