React Router V5 在单击“链接”时不渲染路线,但后退和前进按钮可以工作?

kra*_*ong 4 typescript reactjs react-router react-router-dom

与react-router-dom看似简单的集成却产生了意想不到的结果。当我单击侧边栏中的链接时,链接组件通过生成 url 正常工作,即。localhost:3000/about,但我仍然停留在之前的查看页面。当我单击前进和后退按钮时,路线会呈现正确的组件。

我正在使用 Webpack、Typescript,但认为这些不会影响任何事情。

“反应”:“^16.12.0”,

“反应路由器-dom”:“^5.1.2”

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

    import Sidebar from './Sidebar';
    import Home from './Home';
    import About from './About';
    import Work from './Work';
    import Contact from './Contact';
    import Skills from './Skills';

    const App: React.FC = () => {
      return (
        <Router>
          <div className="main-container">
            <Sidebar />
            <Route exact path="/"><Home /></Route>
            <Route path="/about"><About /></Route>
            <Route path="/skills" component={Skills}></Route>
            <Route path="/work" component={Work}></Route>
            <Route path="/contact" component={Contact}></Route>
          </div>
        </Router>
      );
    };
Run Code Online (Sandbox Code Playgroud)
    //Sidebar Component
    import * as React from 'react';
    import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

    import HomeIcon from '@material-ui/icons/Home';
    import FaceIcon from '@material-ui/icons/Face';
    import WorkIcon from '@material-ui/icons/Work';
    import CodeIcon from '@material-ui/icons/Code';
    import MailOutlineIcon from '@material-ui/icons/MailOutline';

    const Sidebar: React.FC = props => {
      return (
        <Router>
          <nav className="nav-container ">
            <Link to={'/'}><HomeIcon /></Link>
            <Link to={'/about'}><FaceIcon /></Link>
            <Link to={'/skills'}><CodeIcon /></Link>
            <Link to={'/work'}><WorkIcon /></Link>
            <Link to={'/contact'}><MailOutlineIcon /></Link>
          </nav>
        </Router>
      );
    };
Run Code Online (Sandbox Code Playgroud)

azi*_*ium 5

这是因为你的侧边栏组件被包裹在它自己的路由器中。您希望链接和路由共享同一个父路由器。删除您的侧边栏路由器,它应该可以解决您的问题。

    const Sidebar: React.FC = props => {
      return (
          <nav className="nav-container ">
            <Link to={'/'}><HomeIcon /></Link>
            <Link to={'/about'}><FaceIcon /></Link>
            <Link to={'/skills'}><CodeIcon /></Link>
            <Link to={'/work'}><WorkIcon /></Link>
            <Link to={'/contact'}><MailOutlineIcon /></Link>
          </nav>
      );
    };
Run Code Online (Sandbox Code Playgroud)

  • 哪里可以送花给你。 (3认同)