代码之家  ›  专栏  ›  技术社区  ›  Sangram Badi

ReactJS路由无法正常工作

  •  0
  • Sangram Badi  · 技术社区  · 8 年前

    我有一个简单的reactjs项目。具有仪表板登录功能。

    我有dashboardcomponent,它是我的应用程序的入口点。

    仪表板组件

    import React, { Component } from 'react';
    import {
        BrowserRouter as Router,
        Route,
        Link,
        Switch
    } from 'react-router-dom';
    
    import '../css/sidemenu.css';
    import LoginComponent from './LoginComponent';
    import RegisterComponent from './RegisterComponent';
    import ForgetPasswordComponent from './ForgetPasswordComponent';
    import Main from './Main';
    
    import createBrowserHistory from 'history/createBrowserHistory';
    const customHistory = createBrowserHistory();
    
    class Dashboard extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return <Router History={customHistory}>
                        <div>
                            <Route exact path="/login" component={LoginComponent}/>
                            <Route exact path="/signup" component={RegisterComponent}/>
                            <Route exact path="/forget-password" component={ForgetPasswordComponent}/>
                            <Route exact path="/" component={Main}/>
                        </div>
                    </Router>;
        }
    }
    
    export default Dashboard;
    

    登录 enter image description here

    在这里,我为logincomponent、forgetpasswordcomponent、registercomponent和main定义了路由器。

    logincomponent用于用户登录屏幕和逻辑

    login() {
        if(this.state.email) {
            if(this.state.password) {
                this.setState({
                    errorMessage : ''
                });
    
                axios.post(ConstClass.BASE_URL + '/login', this.state).then((response) => {
                    window.location.href = '/';
                }).catch((error) => {
                    this.setState({
                        errorMessage : 'Invalid username and password.'
                    });
                });
    
            }
        }
    }.
    

    主要用于,成功登录后用户将进入主要组件。这里我定义了另一个路由器 产品列表组件,设置组件,添加产品,查看产品

    主.js

    import React, { Component } from 'react';
    import {
        BrowserRouter as Router,
        Route,
        Link,
        Switch
    } from 'react-router-dom';
    
    import '../css/sidemenu.css';
    import ProductListComponent from './ProductListComponent';
    import SettingsComponent from './SettingsComponent';
    import AddProduct from './AddProduct';
    import ViewProduct from './ViewProduct';
    
    import createBrowserHistory from 'history/createBrowserHistory';
    const customHistory = createBrowserHistory();
    
    class Main extends Component {
        constructor(props) {
            super(props);
    
            this.randerDashboard = this.randerDashboard.bind(this);
            this.randerSettings = this.randerSettings.bind(this);
        }
    
        randerDashboard() {
            window.location.href ='/';
        }
    
        randerSettings() {
            window.location.href = '/settings';
        }
    
        render() {
            return <div className="row">
                    <div className="col-lg-3 col-md-3">
                        <div className="nav-side-menu">
                            <div className="brand">Brand Logo</div>
                            <i className="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i>
    
                            <div className="menu-list">
                                <ul id="menu-content" className="menu-content collapse out">
                                    <li onClick={this.randerDashboard}>
                                        <a>Dashboard</a>
                                    </li>
                                    <li onClick={this.randerSettings} className="collapsed">
                                        <a >Settings</a>
                                    </li>
                                </ul>
                            </div>
                        </div>
                        <div className="col-lg-9 col-md-9">
    
                        </div>
                    </div>
                    <div className="col-lg-9 col-md-9">
                        <Router History={customHistory}>
                            <div>
    
                                    <Route exact path="/" component={ProductListComponent}/>
                                    <Route exact path="/settings" component={SettingsComponent}/>
                                    <Route exact path="/add" component={AddProduct}/>
                                    <Route exact path="/view/:id" component={ViewProduct}/>
    
                            </div>
                        </Router>
                    </div>
    
                </div>;
        }
    }
    
    export default Main;
    

    在我现在的代码中,我可以重定向到productlistcomponent。

    登录后 enter image description here

    单击“添加”按钮后

    enter image description here

    但当我试图转到addProduct或viewProduct或setings组件组件时,它显示的是空白页。我怎么能修好它

    1 回复  |  直到 8 年前
        1
  •  3
  •   Kishan Mundha    8 年前

    在主路由(仪表板)中,您正在检查精确路径,这意味着仅当完整路径匹配时,该路由才会呈现。所以在主路由中,只有4个有效的url(登录、注册、忘记密码和 / )只有。

    你没有 /add 路由中的url显示没有一个组件将呈现。

    你可以删除 exact 支柱 / 去阿基夫的路。

                    <div>
                        <Route exact path="/login" component={LoginComponent}/>
                        <Route exact path="/signup" component={RegisterComponent}/>
                        <Route exact path="/forget-password" component={ForgetPasswordComponent}/>
                        <Route path="/" component={Main}/>
                    </div>
    

    我用过 Switch 对于 react-router-dom ,不确定,因为在这个例子中,我们没有 开关 组件。在交换机中,您还可以删除 path 道具,所以所有其他路线将重定向到 Main 组件。