Не удается получить ссылку для отображения новой страницы - PullRequest
0 голосов
/ 21 декабря 2018

Я пытался использовать React Router для настройки страницы со ссылкой на нее, которая будет отображать новую страницу, когда пользователь нажимает на ссылку.Я попробовал упрощенную версию примера в документации React Router , но она отображает дополнительную страницу в нижней части существующей страницы, когда пользователь щелкает ссылку, а не отображает новую страницу.

Я нашел несколько вопросов StackOverflow ( это , это , это ), которые кажутся похожими, но я не нашел там решения- похоже, что некоторые люди заставили его работать, но они не публикуют полный код, и я не смог правильно угадать, что они сделали.Пара мест, кажется, предполагает, что <Route> должен быть в другом файле, чтобы новая страница отображалась.Исходя из этого, вот моя последняя попытка:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App.js';
import About from './About.js';
import { BrowserRouter as Router, Route, Link, Switch } from 'react-router-dom';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(
    <Router>
      <Switch>
        <Route exact path="/about" component={About} />
        <Route exact path="/" component={App} />
      </Switch>
    </Router>, document.getElementById('root'));

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: ...
serviceWorker.unregister();

App.js

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

import './App.css';

class App extends Component {
  render() {
  return (
    <Router>
      <div>
        <h1>This is the main page</h1>
        <ul>
          <li>
            <Link to="/about">About</Link>
          </li>
        </ul>
        <hr />
      </div>
    </Router>
  );
  }
}

export default App;

About.js

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

import './App.css';

function About() {
  return (
    <div>
      <h2>About</h2>
    </div>
  );
}

export default About;

Если я нажму на ссылку, в строке URL-адреса отобразится сообщение localhost: 3000 / about.Но страница не меняется.Если я обновляю браузер, он снова отображает «О программе» на своей странице, что я и хочу сделать, когда нажимаю на ссылку.Это самое близкое, что я получил, но как мне заставить его делать правильные вещи, не нуждаясь в обновлении?Или что-то еще я делаю совершенно неправильно?

Реактивная версия router-dom - 4.3.1.Я использую Chrome.

1 Ответ

0 голосов
/ 21 декабря 2018

Удалите второй <Router> компонент в App.js.Это вызывает проблему.

A, которая использует API истории HTML5 (pushState, replaceState и событие popstate) для синхронизации вашего пользовательского интерфейса с URL.

Источник

Рабочая песочница

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