代码之家  ›  专栏  ›  技术社区  ›  ajb

无法获取显示新页面的链接

  •  2
  • ajb  · 技术社区  · 6 年前

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

    我发现了几个StackOverflow问题( this ,请 this ,请 this )这看起来很相似,但我在那里没有找到解决方案——看起来有些人已经让它工作了,但是他们没有发布完整的代码,我也无法正确地猜测他们做了什么。一些地方似乎认为 <Route> 必须在其他文件中才能显示新页面。基于此,我最近的尝试是:

    索引文件

    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路由器DOM版本为4.3.1。我用的是铬合金。

    1 回复  |  直到 6 年前
        1
  •  2
  •   ztadic91    6 年前

    放弃第二 <Router> app.js中的组件。这就是问题的根源。

    使用HTML5历史API(PushState、ReplaceState)的 以及popstate事件),使您的用户界面与URL保持同步。

    Source

    Working Sandbox