React路由器渲染组件在同一页面上

时间:2018-04-19 14:04:18

标签: javascript reactjs react-router react-redux

我在我的项目中使用react router,当我点击登录按钮时,它renders App组件的内容,但会在same page上显示它们。当我点击new page时,我希望在login上显示,帮助我

import React, { Component } from 'react';
import * as service from '../services/service';
import '../App.css'
import '../index.css'
import App from'../App'
import { Link, Redirect, Router, Route, browserHistory,IndexRoute } from 'react-router';
// import createHistory from 'history/createBrowserHistory'

class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      messages: []
    }
  }
  onSubmit() {
    browserHistory.push('/world');
    }
  render() {
    const { messages } = this.state;
    return (
      <div className="App">
        <header>
          <h2> Doctor Login Page </h2>
        </header>
        <form>

        <Router history={browserHistory}>
        <Route path="/world" component={App}/>
      </Router>
          <br /><br /><br />
          Username: <input name='email' placeholder='Email' /><br /><br />
          Password: <input name='password' placeholder='Password' type='password' />
          <br /><br />
          <button onClick={() => this.onSubmit()}>Login</button>
        </form>
      </div>
    );
  }
}

export default Login;

2 个答案:

答案 0 :(得分:1)

看起来你想以两种方式解决这个问题

1)使用react-router库中的'exact path'属性

<Route exact path="/world" component={App}/>

2)删除路由下面的代码并将其放入组件本身并声明其自己的路由,因为上面的代码运行主路由器以及将静态JSX留在路由器下面。

<Route exact path="/" component={Login}/>
<Route exact path="/world" component={App}/>

答案 1 :(得分:0)

确保将最具体的路线放在顶部。一旦找到匹配项,React route将扫描每条路由,以防万一您没有使用'exact'关键字将重定向到该路由。

示例:

<Route path="/world" component={App}/>
<Route path="/" component={Login}/>

我以前有这个问题,如果将来有人遇到这种情况,可以对路线进行重新排序。