React-router v4一次显示多条路由

时间:2017-06-04 03:27:37

标签: javascript reactjs react-router

我遇到的问题是我使用react-router-dom的路由一次显示所有路由。因此,当我渲染我的App组件和包含路由的开始时,我看到每个路由的页面彼此重叠。所以它看起来像这样:

enter image description here

Sooo开始如何开始,这是我在页面上呈现App组件的index.jsx:

// Dependencies
import React from 'react';
import ReactDOM from 'react-dom';

// Components
import App from './components/app.jsx';

// Styles
import './index.scss';

const container = document.getElementById('main');

ReactDOM.render(<App />, container);

在我的App Component中,路由设置如下:

// Dependencies
import React from 'react';
import { BrowserRouter as Router, Route, Match, Miss } from 'react-router-dom';

// Components
import Login from './pages/login/login.jsx';
import Home from './pages/home/home.jsx';

// Styles
import './app.scss';

const App = () => {
  return (
    <Router>
      <div>
          <Route exact pattern='/' component={Login}/>
          <Route exact pattern='/home' component={Home}/>
      </div>
    </Router>
  );
};

export default App;

这是我的Login / Home组件(Home组件完全相同,只是替换了Login):

// Dependencies
import React from 'react';

// Styles
import './login.scss';

class Login extends React.Component {
  render() {
    return (
      <div className="content">
        <div className='title'>
            Login Page
        </div>
      </div>
    );
  }
}

export default Login;

我还注意到,当我导航到http://localhost:9999/home时,我也收到了这个错误:

enter image description here

显然有些东西连线不正确,我对现有的不同版本的文档感到有些困惑。关于如何解决这个问题的建议非常感谢!

2 个答案:

答案 0 :(得分:3)

来自React Training

  

没有路径的路线始终匹配。

所以在你的情况下,两者都会匹配,因为你正在使用模式。

答案 1 :(得分:1)

您需要添加 Switch 标签。它将在您的组件之间切换。

const App = () => { 
return ( <Router> 
          <Switch>  <Route exact path='/' component={Login}/> 
          <Route exact path='/home' component={Home}/> 
          </Switch> 
         </Router> ); };