React-网址正在更新,但组件未重新呈现

时间:2020-01-23 23:13:02

标签: reactjs react-router react-router-v4 react-router-dom

我正在使用react-router-dom进行路由,问题是单击导航栏元素时url发生了变化,但是属于其他页面的组件没有重新呈现。这是我的代码:

App.js

import React from 'react';
import { Route, Switch } from 'react-router-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import Header from './common/Header';
import Footer from './common/Footer';
import MainPage from './layout/MainPage';
import GiftWrapping from './layout/GiftWrapping';
import Contact from './layout/Contact';
import Catalog from './layout/Catalog';

function App() {
  return (
    <div className="App">
      <Router>
        <Header />
        <Switch>
          <Route path="/home" component={MainPage} />
          <Route path="/catalog" component={Catalog} />
          <Route path="/giftwrapping" component={GiftWrapping} />
          <Route path="/contact" component={Contact} />
        </Switch>
        <Footer />
      </Router>
    </div>  
  );
}

export default App;

Header.js

<nav className="Header-bottom">
  <div className="container clearfix">
    <Router>
    <div className="Left-nav">
      <ul>
        <li>
          <Link to={"/home"} className="active-nav-element">Main Page</Link>
        </li>
        <li>
          <Link to={"/catalog"}>Catalog</Link>
        </li>
        <li>
          <Link to={"/contact"}>Contact</Link>
        </li>
        <li>
          <Link to={"/giftwrapping"}>Gift Wrapping</Link>
        </li>
        <li>
          <Link to={"/catalog"} className="dropdown-toggle">Catalog</Link>
        </li>
      </ul>
    </div>
    </Router>
  </div>
</nav>

1 个答案:

答案 0 :(得分:0)

import React from "react";
import { Link, withRouter } from "react-router-dom";

function Header() {
  return (
    <nav className="Header-bottom">
      <div className="container clearfix">
        <div className="Left-nav">
          <ul>
            <li>
              <Link to={"/home"} className="active-nav-element">
                Main Page
              </Link>
            </li>
            <li>
              <Link to={"/catalog"}>Catalog</Link>
            </li>
            <li>
              <Link to={"/contact"}>Contact</Link>
            </li>
          </ul>
        </div>
      </div>
    </nav>
  );
}

export default withRouter(Header);

请使用<Router>方法,而不是在<header />中添加单独的withrouterCodesandbox reference