React BrowserRouter 将两个页面混合在一起

React BrowserRouter mashing two pages together

遵循教程并尝试在此基础上进行构建;我想向应用程序添加一个新页面。发生的事情是,当我从 "MovieList" 导航到 "MovieDetail.js" 然后 导航到 "About" 时,我拥有来自 [=] 的所有 header 33=],来自该视图的 MovieDetail 信息, 关于页面上的信息。

我不应该将“关于”页面与 header 以外的任何内容混淆。我在这里创建了什么可怕的路由怪物?

https://github.com/ctp-placebo/ghibli

import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
import styled from 'styled-components';
import logo from './static/sootball.png';
import './css/App.css';

import MoviesList from './views/MoviesList';
import MovieDetail from './views/MovieDetail';
import About from './views/About';

const App = () => (
  <Router>
    <div className="App">
      <header key={0}>
        <section className="hero is-info">
          <div className="constainer">
            <div className="columns">
              <div className="column is-1">
                <Link className="LinkSiteName" to="/">
                  <img src={logo} className="App-logo" alt="logo" />
                </Link>
              </div>
              <div className="column is-3">
                <Link className="LinkSiteName" to="/">
                  <SiteName>Studio Ghibli Filmography</SiteName>
                </Link>
              </div>
              <div className="column is-half">
                <SiteDesc>
         something
                </SiteDesc>
                <SiteDesc>
         more info
                </SiteDesc>
              </div>
            </div>
          </div>
        </section>
      </header>

      <div key={1}>
        <div className="navbar is-link" role="navigation" aria-label="main navigation">
          <Link className="navbar-item" to="/">
      Home
          </Link>
          <Link className="navbar-item" to="/About/">
      About
          </Link>
        </div>
      </div>

      <Switch>
        <Route exact path="/" component={MoviesList} />
        <Route path="/:id" component={MovieDetail} />
      </Switch>

      <Route exact path="/About" component={About} />
    </div>
  </Router>
);

export default App;

// var navColor = {
//   color: '#aed6f1',
// };

const SiteName = styled.h1`
 margin: 2rem 0 0 1.5rem;
 font-size: xx-large;
 display: inline-block;
`;
const SiteDesc = styled.p`
 margin: 1.5rem 1.5rem 1.5rem 0;
 text-align: justify;
 > a:link {
  text-decoration: underline;
  font-weight: bold;
 }
 > a:visited {
  color: #8000ff;
 }
`;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

    import React, { Component } from 'react';
import styled from 'styled-components';

const About = function AboutPage() {
  return (
    <div>
      <section className="content" key={0}>
        <p>somthing or other complementary and links</p>
      </section>
    </div>
  );
};

export default About;

你的路由配置问题是因为不是,你所有的 Routes 都在 Switch

  <Switch>
    <Route exact path="/" component={MoviesList} />
    <Route path="/:id" component={MovieDetail} />
  </Switch>

  <Route exact path="/About" component={About} />

所以这里发生的是,当你去 /About 时,路由 /:id 匹配并且开关不再继续,但是由于 /about 在开关之外,它也匹配并因此呈现。你宁愿像

这样构建你的路线
 <Switch>
    <Route exact path="/" component={MoviesList} />
    <Route exact path="/About" component={About} />
    <Route path="/:id" component={MovieDetail} />
  </Switch>