【问题标题】:Can't get link to display a new page无法获取链接以显示新页面
【发布时间】:2023-03-27 16:24:02
【问题描述】:

我一直在尝试使用 React Router 设置一个带有链接的页面,当用户单击该链接时,它将显示一个新页面。我尝试了React Router documentation 中示例的简化版本,但是当用户单击链接时,它会在现有页面的底部显示附加页面,而不是显示新页面。

我发现了几个看起来相似的 StackOverflow 问题(thisthisthis),但我还没有找到解决方案——似乎有些人已经让它工作了,但是他们没有发布完整的代码,我也无法正确猜测他们做了什么。几个地方似乎表明<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;

关于.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。但是页面没有变化。如果我刷新浏览器,它会在自己的页面上重新显示“关于”,这就是我在单击链接时希望它执行的操作。这是我最接近的一次,但我如何让它做正确的事情而不需要刷新?还是我做错了什么?

react-router-dom 版本是 4.3.1。我正在使用 Chrome。

【问题讨论】:

    标签: reactjs react-router-v4


    【解决方案1】:

    在 App.js 中删除第二个 &lt;Router&gt; 组件。这导致了问题。

    使用 HTML5 历史 API(pushState、replaceState 和 popstate 事件)以使您的 UI 与 URL 保持同步。

    Source

    Working Sandbox

    【讨论】:

    • App.js 中只有一个 &lt;Router&gt; 元素。所以我不知道你的意思。最好发布一个完整的代码示例(至少对于一个文件,或者一个类或函数)。我已经看到了几个信息不完整的答案,但未能成功猜测我真正应该做什么。
    • 您在index.js 中有一个路由器组件,在app.js 中有一个路由器组件不确定您是最近更新了代码还是与问题中的代码不同,沙箱进来了
    • 好的,我明白了。但早些时候,当我尝试这样的事情时,它抱怨 应该在 内。我不记得我的确切消息来源是什么。为什么现在不抱怨了?
    • 它没有抱怨,因为传递给 Route 组件的组件位于根 Router 组件下
    猜你喜欢
    • 2012-12-14
    • 2018-09-15
    • 2020-05-05
    • 2013-12-14
    • 2013-05-27
    • 1970-01-01
    • 2020-11-10
    • 2014-04-18
    • 2019-04-02
    相关资源
    最近更新 更多