react-router路由配置问题,无法跳转到预期的组件?

目前组件有三个:Login、Home、NoMatch404
预期:访问:localhost:3000时自动跳到Login,登录成功自动跳到Home,如果输入localhost:3000/aaa应该跳到NoMatch404
问题:所有跳转都被NoMatch404拦截了,请问该如何配置NoMatch404组件
路由配置代码如下

import React from 'react'
import { HashRouter, Route, Switch, Redirect} from 'react-router-dom'
import App from './App'
import Login from './pages/login'
import Admin from './admin'
import Home from './pages/home';
import NoMatch404 from './pages/nomatch/index404'



export default class ERouter extends React.Component{

    render(){
        return (
            <HashRouter>
                <App>
                    <Switch>
                        <Route path="/login" component={Login}/>
                        <Route component={NoMatch404}/>
                        <Route path="/"  render={()=>
                            <Admin>
                                <Switch>
                                    <Route path='/home' component={Home} />  
                                    <Redirect to="/home" />
                                </Switch>
                            </Admin>         
                        } />
                    </Switch>
                </App>
            </HashRouter>
        );
    }
}

APP组件代码

import React, { Component } from 'react';
import './App.css';

class App extends Component {
  render() {
    return (
      <div>
        {this.props.children}
      </div>
    );
  }
}

export default App;

Admin组件代码

import React from 'react'
import { Row,Col } from 'antd';
import Header from './components/Header'
import Footer from './components/Footer'
import { connect } from 'react-redux'
import NavLeft from './components/NavLeft'
import './style/common.less'
import Home from './pages/home'
class Admin extends React.Component{

    render(){
        return (
            <Row className="container">
                <Col span="4" className="nav-left">
                    <NavLeft/>
                </Col>
                <Col span="20" className="main">
                    <Header/>
                    <Row className="content">
                        {this.props.children}
                    </Row>
                    <Footer/>
                </Col>
            </Row>
        );
    }
}
export default connect()(Admin)

问题:目前所有跳转都被NoMatch404拦截了,请问该如何配置NoMatch404组件

阅读 4.5k
2 个回答

将404路由放在最后

1、404页面放到最后面;
2、做是否登录判断,如果登录了,继续访问之前的链接,如果这个链接匹配不到你的前端路由,就会到404页面。如果匹配到了了,就会进入到对应的页面。这样就没有问题了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题